如何在 Linux 中使用 SSH ProxyJump 和 SSH ProxyCommand
简介:在本指南中,我们演示了在连接到跳转服务器时如何使用 SSH ProxyJump 和 SSH ProxyCommand 命令。
在我们之前关于如何设置 SSH Jump 服务器的指南中,我们介绍了堡垒主机的概念。 堡垒主机或跳转服务器是SSH客户端在访问目标远程Linux系统之前首先连接的中间设备。 SSH Jump 服务器充当 IT 资源的网关,从而减少攻击面。
SSH ProxyJump 和 ProxyCommand 命令确定客户端如何通过跳转服务器、跳转主机连接到远程服务器,或堡垒服务器。
本指南重点介绍 Linux 中的 SSH ProxyJump 和 SSH 代理命令。
使用 SSH ProxyJump 命令连接远程 Linux
ProxyJump 命令用 -J
标志表示。它是在 OpenSSH 服务器版本 7.3 中引入的,可帮助您通过跳过堡垒或跳转服务器来连接到远程目标。
下面的语法显示了如何使用此选项:
ssh -J <jump-server> <remote-target>
在多个堡垒或跳转服务器的情况下,语法采用以下格式。
ssh -J <jump-server-1> <jump-server-2> <remote-target>
在这两种情况下,您都将以 root 用户身份登录每一步。由于安全原因,这并不理想,因此您可能希望在每个实例中创建不同的用户。
您可以显式指定不同的用户和 SSH 端口,如图所示。
ssh -J <user@jump-host:port> <user@remote-target:port>
为了演示 ProxyJump 标志的实际作用,我们进行了如下所示的简单设置。
Jump Server IP: 173.82.232.55 User: james
Remote Target IP: 173.82.227.89 User: tecmint
要使用 Jump 服务器连接到远程目标,命令将如下所示。
ssh -J [email [email
该命令将提示您输入跳转服务器的用户密码,然后是目标系统的密码,您将被授予访问目标系统的权限。
在 ~/.ssh/config 文件中配置代理主机
如果您经常使用特定的堡垒连接到特定的远程目标,则可以在 ~/.ssh/config 文件中附加以下 ProxyJump 配置,以使连接无缝。发生这种情况时,您只会被验证一次,并且这种情况仅发生在远程目标上。
Host host-jump
User james
Hostname 173.82.232.55
Host host_destination
User tecmint
Hostname 173.82.227.89
Port 22
使用上述配置,您可以如图所示连接到目标。
ssh -J host_destination
使用 SSH ProxyCommand 命令连接远程 Linux
在SSH代理跳转之前,ProxyCommand是跳转主机到达远程目标的唯一方法。它的工作原理是通过跳转服务器或堡垒从远程目标转发 stdin(标准输入)和 stdout(标准输出)。
ProxyCommand 采用以下语法。
ssh -o ProxyCommand="ssh -W %h:%p <jump server>" <remote target>
此处,%h:%p
参数的 -W
将 stdin 和 out 转发到远程主机 (%h)
和远程主机主机的端口(%p)
。
要将命令付诸实践,我们的命令如下所示
ssh -o ProxyCommand="ssh -W %h:%p 173.82.232.55" 173.82.227.89
在 ~/.ssh/config 文件中配置 ProxyCommand
当然,输入整个命令既乏味又耗时。为了避免键入如此冗长的命令,请将以下代码行添加到您的 ~/.ssh/config 文件中。
Host host-destination
Hostname 173.82.227.89
ProxyCommand ssh -q -W %h:%p host-jump
保存并退出。
现在您所要做的就是运行以下命令来连接到远程服务器。
ssh host-destination
结论
在本指南中,我们演示了 ProxyJump 和 ProxyCommand 命令的工作原理。一般来说,ProxyJump 是 ProxyCommand 的更好替代品,并提供了一种通过跳转主机连接到远程目标的更简单、无缝的方式。