🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

ssh-agent 转发:让服务器用我们电脑上的 SSH Key 验证身份

你在自己电脑上生成了一对密钥(密钥 + 公钥),你应该在代码托管(远程仓库)服务商的个人帐户里,把自己的 SSH Key(公钥) 添加进去。这样你就可以直接在电脑上把项目的代码 Push 到项目的远程仓库,因为会使用 SSH Key 的方式去验证你的身份。

远程仓库的地址一般有两种,HTTPS 与 SSH,推荐使用 SSH 类型的地址,这样你就可以用自己的 SSH Key 去验证身份,不需要输入你在远程仓库上的用户名与密码。项目的远程仓库我们的服务器也需要有权限可以访问。因为在服务器上需要从远程仓库那里拉取项目最新的代码。

你可以在服务器上也生成一对密钥,然后把公钥添加到远程仓库的帐户里。或者,可以用 ssh-agent 转发,让服务器直接使用我们自己电脑上的 SSH Key 去验证身份。

试验

做个试验,假设你把电脑上的公钥添加到了 Github 的帐户里。打开命令行工具,Windows 上用 Bash 模式的 Cmder(完整版),macOS 打开终端。执行:

ssh -T git@github.com

如果返回:

Hi ninghao! You've successfully authenticated, but GitHub does not provide shell access.

说明我们成功地用自己的 SSH Key 通过了 Github 网站的身份验证。假设我们成功了。再做个试验,登录到你的服务器,执行同样的命令。

如果返回:

Permission denied (publickey).

说明我们现在还不能用 SSH Key 通过 Github 的身份验证,你需要在服务器上生成密钥,再把公钥(~/.ssh/id_rsa.pub)里的内容添加到你在 Github 网站的个人帐户里面。

现在我们可以配置使用 ssh-agent 转发的功能,让服务器使用我们电脑上的 SSH Key 去在 Github 上验证自己的身份。

配置

Windows

新建一个 Bash 模式的 Cmder 命令行标签。 先在后台运行 ssh-agent:

eval "$(ssh-agent -s)"

然后编辑一下当前用户主目录下的 SSH 的配置文件:

vi ~/.ssh/config

添加内容:

Host *
 ServerAliveInterval 60
 AddKeysToAgent yes
 IdentityFile ~/.ssh/id_rsa
Host 42.120.40.68
 ForwardAgent yes

macOS

打开终端。编辑一下当前用户主目录下的 SSH 的配置文件:

vi ~/.ssh/config

添加内容:

Host *
 ServerAliveInterval 60
 AddKeysToAgent yes
 UseKeychain yes
 IdentityFile ~/.ssh/id_rsa
Host 42.120.40.68
 ForwardAgent yes

解释

  • ServerAliveInterval 60,每隔 60 秒向用 SSH 连接的服务器发送一点数据,这样服务器就不会自动断开跟你的 SSH 连接了。“哦,你还在 ~ ”
  • AddKeysToAgent yes,就是把自己的 SSH Key 添加到 ssh-agent 里面使用。
  • IdentityFile ~/.ssh/id_rsa,设置了密钥的位置。
  • Host 42.120.40.68,在指定的 IP 地址主机,应用下面这些配置。
  • ForwardAgent yes,使用 ssh-agent 转发。

macOS:

  • UseKeychain yes,把 SSH Key 添加到系统的钥匙链里。这样就不需要每次手工把 SSH Key 添加到 ssh-agent 里面了。

测试

这里再登录到服务器,执行:

ssh -T git@github.com

这回服务器就会用 ssh-agent 里的 SSH Key,也就是我们自己电脑上的 SSH Key 去验证身份。如果你的电脑上的 SSH Key 添加到了 Github 个人帐户的设置里,在服务器上执行上面这行命令,应该就会返回:

Hi ninghao! You've successfully authenticated, but GitHub does not provide shell access.

注意

Windows 用户需要注意,每次启动命令行以后,你都需要手工去在后台运行 ssh-agent。我们可以配置一下命令行工具,启动它的时候让它自动在后台运行 ssh-agent。

Bash 模式的 Cmder 命令行工具的配置文件是 cmder/config/user-profile.sh,打开这个文件,添加一行:

eval "$(ssh-agent -s)"

 

评论

SSH 的玩法很多样嘛~~

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点