跳转服务器的 SSH 和身份文件

SSH and identity file for jump server

我正在尝试通过跳转服务器登录 my-serverjump.example.com

我不用密码也能成功登录跳转服务器:

ssh -i .ssh/id_rsa user@jump.example.com

但是如果我使用

ssh -i .ssh/id_rsa -o ProxyCommand="ssh -W %h:%p user@jump.example.com" user@my-server
# or
ssh -i .ssh/id_rsa -J user@jump.example.com user@my-server

系统提示我输入 user@jump.example.com 的密码。 如果我提示输入 user@my-server 的密码,我不会感到惊讶。

如何为跳转服务器指定身份文件?

我建议将以下内容添加到您的 ssh 配置中

Host my_server
        Hostname my-server
        ProxyCommand ssh -W %h:%p jump_server
        User user
        IdentityFile path/to/ssh/identity/file
        Port 22
 
Host jump_server
        Hostname jump.example.com
        User user
        IdentityFile path/to/ssh/identity/file
        Port 22
        

最后连接到您的目标服务器使用

ssh my_server

这里有点死机,但我 运行 遇到了同样的问题。然而,就我而言,我很容易通过查看原始 post 来解决它。在原来的post中,尝试了这个命令:

ssh -i .ssh/id_rsa -o ProxyCommand="ssh -W %h:%p user@jump.example.com" user@my-server

但是已经指出指定的标识文件“.ssh/id_rsa”是针对“jump.example.com”而不是“my-server”的。因此,如果您将标识文件参数移动到 ProxyCommand,它应该会按预期工作:

ssh -i .ssh/id_rsa -o ProxyCommand="ssh -W %h:%p user@jump.example.com -i .ssh/id_rsa" user@my-server

在我的具体案例和测试中,我有一个 non-standard 端口连接到我的“jump.example.com”服务器,所以我的命令看起来更像是(更改端口以保护愚蠢的人):

ssh -o ProxyCommand="ssh -W %h:%p user@jump.example.com -p 30000 -i .ssh/id_rsa" user@my-server

当我执行这个命令时,我收到了输入密码“my-server”的提示。我走得更远,在我的客户端机器上为“my-server”创建了一个不同的(临时的)授权密钥,并使用此命令完全没有密码:

ssh -o ProxyCommand="ssh -W %h:%p user@jump.example.com -p 30000 -i .ssh/id_rsa" user@my-server -i .ssh/temp_id_rsa

对于您经常做某事而无需更改的情况,采用 ssh_config 解决方案可以说在多个方面都更好。但就我而言,我使用 ssh 隧道在每天更改多次的动态测试环境中进行枢纽,而且我来自不同的位置,因此单个命令更有意义。