![使用 proxycommand 无法进行 ssh 无密码登录](https://linux22.com/image/45133/%E4%BD%BF%E7%94%A8%20proxycommand%20%E6%97%A0%E6%B3%95%E8%BF%9B%E8%A1%8C%20ssh%20%E6%97%A0%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95.png)
我有 2 台服务器。我只能使用服务器 A 连接到服务器 B。在我的~/.ssh/config
文件中:
Host serverB
Hostname serverb
User root
ForwardAgent yes
Port 22
ProxyCommand ssh user@serverA nc %h %p
当我登录到 serverA 并键入时,ssh root@serverB
它会在不询问密码的情况下进行连接,但是当我ssh ServerB
在本地计算机上键入时,它会询问 ServerB 的密码。为什么?
答案1
ProxyCommand
只给出一个隧道来通过管道连接外部ssh
。
当您ssh serverB
从执行此操作时serverA
,您可能正在使用 上帐户的密钥serverA
。
当您从客户端计算机执行此操作时,您通过启动的命令ssh serverB
进行连接的事实不会神奇地让您访问 serverA 上的密钥。nc
serverA
您需要将 serverA 的密钥添加到您的客户端代理。
例如:
ssh-add <(ssh serverA 'cat .ssh/id_rsa')
在 serverA 上添加密钥.ssh/id_rsa
(上面的 ksh93/bash/zsh 语法)。
答案2
一些事情:
- 您有多确定它要求 serverB 的密码?它可能会要求 serverA
- 您不需要转发您的代理 - 在这种情况下您将直接与 serverB 握手 - 它不会是 serverA 与 serverB 握手
- 您不需要将服务器 A 中的密钥添加到您的客户端 - 同样,您将直接与服务器 B 对话 - 只需通过服务器 A - 所以看不到这样做的意义 - 而且这也是一个安全隐患。
- 当您
ssh serverA
- 它会要求输入密码吗? 如果是这样 - 您是否考虑过在 serverA 的 authorized_hosts 上安装您的公钥ssh-copy-id serverA
? - 使用 -vvv 和 Pastebin/filebin/post 输出运行
答案3
我没有完整的答案,只是需要检查一些事情。验证两个机器上 unix 用户的主目录的权限。验证两个框中 $HOME、$HOME/.ssh 以及 .ssh 下所有文件的目录权限。检查 ssh 的版本。还比较两个盒子的 ssh 配置文件。
但这种情况过去在我身上发生过很多次。是这两件事造成的?
1.目录权限不正确。 2. $HOME/.ssh/ 中的服务器密钥错误