使用来自SSH代理的特定转发密钥?


30

假设我有一个Github的钥匙,还有其他钥匙。我ssh-add -L在家用计算机A上的ssh代理中添加了很多密钥(返回很多行)。在我的.ssh/config主机中,我设置了与哪个主机一起使用的密钥。

ssh -T -vvv git@github.com 2>&1 | grep Offering

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

正如预期的那样,仅提供一个密钥。但是然后使用ssh-sing到某些主机B ForwardAgent yes并重复相同的命令,我得到了

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.linode2
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.helium
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

表示它会尝试我所有的键。这是有问题的,因为在服务器返回之前只能尝试有限数量的密钥Too many authentication failures。所以我尝试.ssh/config在主机B上进行编辑以包括

Host github.com
  IdentityFile /Users/doxna/.ssh/id_rsa.github
  IdentitiesOnly yes

但是后来我没有得到关键的产品,而是

debug2: key: /Users/doxna/.ssh/id_rsa.github ((nil))

我猜这意味着找不到该密钥(?)毕竟,该密钥位于我的家用计算机A上,而不是主机B上,所以问题是如何在主机B上引用它?希望我能解释这个问题。

Answers:


28

你有正确的主意。您唯一缺少的部分是所指向的文件IdentityFile必须存在。它不需要包含私钥,仅具有可用的公钥就足够了。

在主机B上,您可以通过键入从代理中提取公钥ssh-add -L | grep /Users/doxna/.ssh/id_rsa.github > ~/.ssh/id_rsa.github.pub,然后从指向该文件。~/.ssh/config


仅供参考,公钥名称无关紧要。它将根据内容从代理中选择适当的密钥。
akostadinov

@akostadinov是的。如果您指向ssh没有关联私钥文件的公钥文件,则它应仅从文件中读取公钥,并让代理使用相应的私钥来生成签名。
kasperd

这样可以有效地将密钥保存在主机B上!有关不将密钥保存在服务器上的解决方案,请参见以下@ mc0e的答案。
皮特

2
@Pitt不,不是。它只存储公共密钥。这不是问题,因为公钥从未被期望首先保密。只要代理转发到位,代理转发就可以使主机访问使用密钥,但是代理绝不会在任何地方发送密钥。
kasperd

@kasperd,当您使用密钥与用户代理进行实时连接时,您不需要私钥的实际副本。以超级用户身份可以访问其他已登录用户的代理连接。
mc0e

5

@Kasperd的回答很不错,但也请注意,如果主机B受到威胁,或者如果您不信任那里所有具有root特权的用户,那么只要登录后,您仍会将所有密钥暴露给滥用在那个主机上。

因此,更好的方法可能是仅转发对所需密钥的访问。也许尝试ssh-agent-filter在debian / Ubuntu存储库中或从github中找到它

编辑:我已经选择了ssh-ident而不是ssh-agent-filter选择性地转发密钥,尽管它并不像人们希望的那样流畅。


1
来自@kasperd对他的回答的评论:“它不是。它仅存储公共密钥。这不是问题,因为从一开始就从未期望将公共密钥保密。代理转发使主机可以访问只要代理转发到位就使用密钥,但是代理永远不会在任何地方发送密钥”
Bdoserror

1
@Bdoserror作为root用户,您可以在关联用户登录时滥用ssh-agent连接。您只需复制SSH_*环境变量,然后使用密钥登录到要使用的位置,尽管实际上并没有实际的副本。
mc0e'Mar

需要澄清的是:这个答案确实是错误的-尽管来自mc0e的滥用情形是真实的,但与保存公钥无关-如果中间主机受到威胁,则无论您的代理连接是否可用于通过私钥进行身份验证是否将公共密钥保存在中间主机上。您的私钥不会受到损害,并且保存公钥不会使其变得更容易,因为与代理有连接的任何攻击者无论如何都可以向其索要公钥。
恢复莫妮卡

@ marc-lehmann重读了我写的内容。如果您转发密钥,则它们将被公开,但是您可以限制转发哪些密钥。
mc0e

我对您写的内容感到满意-请说明我们评论的内容,而不是该人。问题在于您的答案完全是错误的,因为在您编写时,它假定密钥已“转发”到远程主机。不会发生这种情况,并且密钥本身不会暴露。
恢复莫妮卡
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.