我使用的是多跳 SSH 连接,每跳都启用了代理转发。我想使用前一跳的密钥(而不是来自原始机器的密钥)连接到目标机器(机器 D)。
细节:
在机器 AI 的控制台上通过 SSH 连接到机器 B(ForwardAgent yes
):
Machine A ---SSH(id_rsa_A)---> Machine B ---SSH(forwarded_key)---> Machine D1
当我ssh-add -L
在 B 上执行时,我得到了id_rsa_A
。如果我从 B 连接到 D1,它会用于id_rsa_A
身份验证。
好的,这就是我想要的。
在机器 BI 的控制台上通过 SSH 连接到机器 C ( ForwardAgent yes
):
Machine B ---SSH(id_rsa_B) ---> Machine C ---SSH(forwarded_key)---> Machine D2
当我ssh-add -L
在 C 上执行时,我得到了id_rsa_B
。如果我从 C 连接到 D2,它会用于id_rsa_B
身份验证。
好的,这就是我想要的。
现在我回到机器 A,并ForwardAgent yes
通过 B 与机器 C 建立两跳 SSH 连接:
Machine A ---SSH(id_rsa_A)---> Machine B ---SSH(id_rsa_B)---> Machine C ---SSH(forwarded_key)---> Machine D2
当我ssh-add -L
在 C 上执行时,我得到了id_rsa_A
。当我连接到机器 D2 时,SSH 连接使用,id_rsa_A
即使 B 和 C 之间的先前连接明确使用了id_rsa_B
。
这就是我想要改变的。也就是我想要forwarded_key
成为的id_rsa_B
。
是否有可能(以及如何)强制机器 C(从 A 通过 B 连接)用于id_rsa_B
其传出 SSH 连接?
我甚至ForwardAgent no
在第一次连接时尝试了选项:
Machine A ---SSH(id_rsa_A)---> Machine B
继续ForwardAgent yes
后续连接:
Machine B ---SSH(id_rsa_B)---> Machine C
但进一步的连接根本不使用代理转发:
Machine C ---SSH(no_key)---> Machine D2
它看起来只适用于控制台和当前连接的机器之间的整个管道。