我希望能够使用 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
。