如何让 ssh 仅使用来自 ssh-agent 的一个密钥?

如何让 ssh 仅使用来自 ssh-agent 的一个密钥?

连接到同一台主机时,我需要使用两个不同的 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)

在一个上下文中我需要 ssh 来使用 key2_rsa,在另一个上下文中我需要 ssh 来使用 key3_rsa

在这里使用错误的密钥会导致与目标系统的连接失败(因为它识别出另一个密钥可以访问机器但不能访问该子系统)。

我该如何让它工作?

答案1

ssh -i还接受包含民众密钥,如果在代理中找到匹配的密钥,则会先尝试该密钥。

此外,如果-o IdentitiesOnly=yes指定,客户端将使用仅有的该密钥,如果被拒绝,不会回退到任何其他密钥。(请注意,回退到其他机制(例如 GSSAPI 或密码)由不同的选项控制。

相关内容