使用AgentForwarding时在ssh_config中使用IdentityFile指令


15

是否可以使用.ssh / config中的IdentityFile指令指定转发的密钥?

尝试通过Capistrano / GIT在我们的生产服务器上部署一些代码时,我遇到了这个问题。我的个人GIT密钥和我的工作GIT密钥始终都加载到我的SSH代理中,而恰好是我的个人密钥首先添加到了代理中。我在通过Capistrano进行部署时使用代理转发,因此当主机尝试对git pull操作进行身份验证时,它失败并显示以下错误:

错误:“您的用户”拒绝了“某些仓库”的权限。

因为它尝试使用我的个人git密钥进行身份验证,然后再尝试使用适当的密钥(稍后在ssh代理中提供),并假定我正在访问我没有访问权限的外部存储库。我可能可以让个人用户访问每个工作仓库,但是在本地计算机上,可以通过在.ssh / config中定义自定义域来解决此问题,如下所示:

主机 personal.github.com
主机名 github.com
用户 git
IdentityFile〜 / .ssh / some_key

主机工作 .github.com
主机名 github.com
用户 git
IdentityFile〜 / .ssh / some_other_key

这样,git永远不会感到困惑。是否可以为生产盒上的转发密钥创建.ssh / config规则,以便他们在提取新代码时始终知道要使用哪个密钥?基本上我希望能够做到:

主机 work.github.com
主机名 github.com
用户的git
IdentityFile some_forwarded_key

谢谢!

Answers:


22

您可以使用密钥的公共部分来指定要从转发的代理中使用的私有密钥。这要求在任何“中间”计算机(将本地ssh-agent转发到的计算机)上创建一个额外的文件(密钥的公共部分)。

  1. 安排中间机器在方便的位置(例如~/.ssh/some_other_key.pub)复制所需密钥的公共部分。

    从任何已经拥有密钥公开部分的机器上:

    scp some_other_key.pub intermediate:.ssh/
    

    或者,在中间计算机上:

    ssh-add -L | grep something_unique > ~/.ssh/some_other_key.pub
    

    您可能希望编辑公共密钥的尾部“注释”部分,以更好地标识密钥的来源/所有者/用途(或尝试隐藏相同的名称)。

  2. 使用-i或将上述公共密钥文件的路径名使用IdentityFile

  3. 您可能还需要使用IdentitiesOnly yes(in .ssh/config-o)来防止ssh尝试从转发的代理提供任何其他身份。


这是其他10个解决方案中唯一对我有用的东西。
特蕾西·富

1
我意识到,如果将与要使用的私钥相关联的公钥放在中间机上的〜/ .ssh / id_rsa.pub中,则默认情况下将使用它,而无需在〜/中进行任何配置.ssh / config。
bschlueter '16

谢谢克里斯和bschlueter!我现在连接:ssh someserver -t“ ssh-add -L | grep something_unique>〜/ .ssh / id_rsa.pub; cd some / other / folder; bash --login”
blablabla

当我尝试使用ssh -v -T ...服务器接受公用密钥时,然后ssh说No such identity: /home/name/.ssh/id_rsa: No such file or directory,随后身份验证失败。我在所有配置中都启用了ForwardAgent。可能是什么问题呢?
拉尔斯·尼斯特罗姆(LarsNyström),
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.