ssh
可以-i
选择在身份验证时告诉使用哪个私钥文件:
-i identity_file
选择一个文件,从中读取用于 RSA 或 DSA 身份验证的身份(私钥)。?默认
~/.ssh/identity
为协议版本 1~/.ssh/id_rsa
和~/.ssh/id_dsa
协议版本 2。?身份文件也可以在配置文件中按主机指定。可以有多个-i
选项(以及在配置文件中指定的多个身份)。
是否有类似的方法来告诉git
在~/.ssh
目录中有多个私钥的系统上使用哪个私钥文件?
是否可以使用 .ssh/config 中的 IdentityFile 指令指定转发的密钥?
我在我们的生产服务器上尝试通过 Capistrano/GIT 部署一些代码时遇到了这个怪癖。我的个人和我的工作 GIT 密钥总是加载在我的 SSH 代理中,而且碰巧我的个人密钥首先添加到代理中。我在使用 Capistrano 部署时使用代理转发,因此当主机尝试对 `git pull` 操作进行身份验证时,它失败并出现以下错误:
错误:对“您的用户”的“某些回购”的权限被拒绝。
因为它在尝试适当的密钥(稍后在 ssh 代理中提供)之前尝试使用我的个人 git 密钥进行身份验证,并假设我正在访问一个我无权访问的外部存储库。我可以让我的个人用户访问每个工作仓库,但在我的本地机器上,我可以通过在 .ssh/config 中定义自定义域来解决这个问题,如下所示:
主机个人.github.com主机
名github.com
用户git
IdentityFile ~/.ssh/some_key
主机work.github.com
主机名github.com
用户git
IdentityFile ~/.ssh/some_other_key
这样 git 永远不会混淆。是否可以为我的生产设备上的转发密钥创建 .ssh/config 规则,以便他们在拉入新代码时始终知道使用哪个密钥?基本上我希望能够做到:
主机work.github.com
主机名github.com
用户git
IdentityFile some_forwarded_key
谢谢!
连接到同一主机时,我需要使用两个不同的 ssh 密钥。
我需要用来连接的机器(因为IP地址限制)不是存储ssh密钥的机器,所以我在这里使用ssh-agent。此外,这些 ssh 连接是在中间计算机上运行的脚本的控制下发生的。
如果 ssh 密钥位于该计算机的本地,我想我可以使用 ssh -i (或者可能是嵌套代理中的 ssh-add )来指定我想要使用的身份,并且我可以将脚本和/或脚本上下文更新为为我的案例做正确的事情(可能使用配置文件来指定相关详细信息)。
但是,由于密钥不在执行 ssh 连接的计算机上,因此 ssh -i 失败(该计算机上不存在私钥文件)。同样,ssh-add 希望我通过提供私钥的文件名来指定密钥。(或者我怀疑情况确实如此 - 我实际上还没有弄清楚如何嵌套 ssh-agents,但 ssh-add 上的文档怀疑这是否是一种可行的方法。)
所以我的问题是:如何让 ssh 在与目标系统联系时仅使用我指定的密钥?
[当然,其他人也需要使用这些脚本,但这是我自己使用后可以解决的问题。]
换句话说,我有这样的情况:
$ ssh-add -l
2048 SHA256:A8PFww3boSTRe8sPvXDgir09KNVqu+JvWNw7/GLCiwM /home/account/.ssh/key1.pem (RSA)
2048 SHA256:Em5p4B++GIm0l/zDYgZ26VaHbIb07T6MViu5ioMPTiA /home/account/.ssh/key2_rsa (RSA)
4096 SHA256:JON2JaTTk1r3ufUrGm4C/cE9IG9edyfDxE1zTel/0u8 /home/account/.ssh/key3_rsa (RSA)
Run Code Online (Sandbox Code Playgroud)
在一种情况下,我需要 ssh 来使用 key2_rsa,而在另一种情况下,我需要 ssh 来使用 key3_rsa
此处使用错误的密钥会导致与目标系统的连接失败(因为它将另一个密钥识别为有权访问计算机,但无权访问该子系统)。
我该如何进行这项工作?