使用 SSH 链跨多台机器传输 SSH 密钥

使用 SSH 链跨多台机器传输 SSH 密钥

我希望能够使用 ssh 上的 -A 标志在多台机器之间进行 ssh,例如: ssh -A user@hostB ssh -A user@hostC

在我拥有 SSH 密钥的情况下,这种方法很有效,这些密钥允许我从我的机器(主机 A)转到主机 B,然后从主机 B 转到主机 C。但如果我希望能够从 A 转到 C,但不允许从 B 到 C 进行基于密钥的通信,该怎么办?有没有办法让我可以通过 SSH 管道传递密钥,而不必实际存储并保留该密钥在机器 B 上?

答案1

有没有一种方法可以让我通过 SSH 管道传递密钥,而不需要实际将该密钥存储并留在机器 B 上?

首先,密钥永远不会离开你的本地机器。该-A选项仅允许 hostB 和 hostC 上的客户端提交请求签署数据返回到您的本地 ssh-agent。(SSH 身份验证通过使用您的密钥对进行数字签名来实现。)

(从技术上讲,他们可以提交任何ssh-agent 命令,包括“列出密钥”或“添加新密钥”。但是,没有用于提取私钥或任何其他敏感信息的命令。


但是,如果 hostB 完全不受信任(并且您不希望它具有提交身份验证请求的能力),请使用不同的方法:在本地运行第二个客户端并转发SSH 协议通过 SSH“管道”。这样中间主机就只能看到加密的对话。

最简单的方法(在 OpenSSH 7.3 及更高版本中)是 ProxyJump 选项:

ssh -J user@hostB user@hostC

其他选择是-o ProxyCommand="ssh -W %h:%p user@hostB"通过 或静态 TCP 隧道-L

相关内容