无密码 ssh 隧道

无密码 ssh 隧道

我有我的本地机器(Mac),我想访问服务器B(linux)。需要通过服务器A(linux)访问服务器B。我通过修改本地计算机中的 .ssh/config 文件设置了隧道,如下所示:

Host serverB
 HostName serverB.com
 User Ant
 ProxyCommand ssh -q -Y serverA.com -W %h:%p

这曾经正常工作[0]。接下来,我使用 ssh 密钥设置从本地到 serverA 以及从 serverA 到 serverB 的无密码登录。这意味着我可以做

> ssh [email protected]
(serverA)> ssh [email protected]
(serverB)>

一切正常。现在我想要的是能够在没有密码的情况下连接到服务器B;但如果我这样做

> ssh [email protected]

系统要求我提供切断 A 和 B 的密码才能继续。这是以下的输出ssh -v Ant@serverB

OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /Users/Ant/.ssh/config
debug1: /Users/Ant/.ssh/config line 16: Applying options for serverB
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Executing proxy command: exec ssh -q -Y serverA.com -W serverB.com:22
debug1: identity file /Users/Ant/.ssh/id_rsa type 0
debug1: key_load_public: No such file or directory
debug1: identity file /Users/Ant/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/Ant/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/Ant/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/Ant/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/Ant/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/Ant/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/Ant/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: permanently_drop_suid: 501
[email protected]'s password: 

我可以看到它是使用密钥登录但出现问题。我还要补充一点,我的 RSA 密钥保存到非标准位置,因此我将其添加到我的 .ssh/config 文件中:

IdentityFile ~/.ssh/key_serverA

有什么想法吗?

[0]:由于某种原因,这不再起作用,因为用户名错误。它提示我输入密码[电子邮件受保护]而不是[电子邮件受保护]

答案1

User部分中的选项仅Host适用于与该主机匹配的连接,不一定适用于为代理等启动的任何命令,对于这些命令,将独立应用 ssh 配置设置。

因此,要么ProxyCommand应该明确地具有Ant@serverA,要么应该有另一个匹配的HostserverAUser Ant为其设置。

答案2

这个解决方案是由问题的作者提出的:

我找到了一个解决方案。问题是,出于某种原因,ssh 尝试使用 local_username 而不是 Ant(serverA 和 serverB 上的用户名)访问 serverA。为了解决这个问题,我修改了 config tunnel 命令,明确添加了我的用户名:

Host serverB
 HostName serverB.com
 User Ant
 ProxyCommand ssh -q -Y [email protected] -W %h:%p

这解决了问题,现在无密码登录也适用于 serverB! :-)

相关内容