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

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

假设我有一个 Github 密钥,还有其他密钥。我已将许多密钥添加到我ssh-add -L家用计算机 A 上的 ssh 代理中(返回许多行)。在我的ssh 代理中.ssh/config,我已设置了哪个密钥用于哪个主机,例如

ssh -T -vvv [email protected] 2>&1 | grep Offering

给出

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

正如预期的那样,只提供了一个密钥。但是当我使用 ssh 连接到某个主机 BForwardAgent 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 上引用它?希望我能解释这个问题。

答案1

你的想法是对的。你唯一遗漏的部分是指向的文件IdentityFile必须存在。它不需要包含私钥,只要有公钥就足够了。

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

答案2

@Kasperd 的回答很不错,但也请注意,如果主机 B 受到威胁,或者您不信任那里所有具有 root 权限的人,那么只要您登录该主机,您的所有密钥仍然有可能被滥用。

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

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

相关内容