![双重 ssh 要求输入密码来解锁 RSA 密钥,但实际上不应该](https://linux22.com/image/1259581/%E5%8F%8C%E9%87%8D%20ssh%20%E8%A6%81%E6%B1%82%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81%E6%9D%A5%E8%A7%A3%E9%94%81%20RSA%20%E5%AF%86%E9%92%A5%EF%BC%8C%E4%BD%86%E5%AE%9E%E9%99%85%E4%B8%8A%E4%B8%8D%E5%BA%94%E8%AF%A5.png)
我有两台机器,M1 和 M2,都运行 OS X,还有第三台机器 L,运行 Linux。M1 和 M2 在 Keychain 中解锁了 RSA 密钥,因此我可以:
- 从 M1 到 M2 的 ssh 连接无需输入密码或密钥的密码
- 从 M2 到 L 的 ssh 连接无需输入密码或密钥的密码
但是,当我从 M1 ssh 到 M2,然后到 L(物理上仍在 M1 上)时,它会要求我输入密钥的密码!我尝试login.keychain
使用security
命令手动解锁,但似乎没有效果。
出了什么问题?我怎样才能在不输入任何密码的情况下进行双重 ssh?
答案1
钥匙串工作得正如它应该的那样,-A 所做的就是将你加载的钥匙从 M1 转发到 M2 再到 L。我怀疑当你登录到 M2 时,它并没有初始化你的钥匙/启动完整的会话,因为图形登录过程并没有发生,也没有产生它的所有副作用。
如果您想要将您的代理转发到任何您使用 ssh 的地方,您应该创建文件 ~/.ssh/config 并为 * 主机添加一个条目,并将 ForwardAgent 设置为 yes:
Host *
ForwardAgent yes
此外,您可以通过将 * 替换为主机名来更具体地说明要将代理转发到哪个主机。
答案2
您正尝试从 M2 登录 L。这意味着 M2 必须拥有您的凭据(密钥和密码)。但您的凭据实际上在 M1 上。
您可以将凭据复制到 M2,但随后您必须与 M2 上的钥匙串进行交互。或者,您可以告诉 M2 联系 M1 上的钥匙串,而不是 M2 上的钥匙串。这实际上是常用方法,有些安装可以立即使用,但您的安装显然不行。
使能够代理转发从 M1 到 M2。在命令行上,使用 OpenSSH,传递选项-A
(即在 M1 上运行ssh -A M2
)。您也可以将ForwardAgent
指令放入~/.ssh/config
。也许在 OSX 上也有 GUI 方式来执行此操作。