我有两台机器,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 方式来执行此操作。