如何在 Linux 中使用 SSH ProxyJump 和 SSH ProxyCommand
kevin.Zhu 发布于:2024-1-22 8:19 有 262 人浏览,获得评论 0 条
https://cn.linux-console.net/?p=2774
简介:在本指南中,我们演示了在连接到跳转服务器时如何使用 SSH ProxyJump 和 SSH ProxyCommand 命令。
在我们之前关于如何设置 SSH 跳转服务器的指南中,我们介绍了堡垒主机的概念。 堡垒主机或跳转服务器是SSH客户端在访问目标远程Linux系统之前首先连接到的中间设备。 SSH Jump 服务器充当您 IT 资源的网关,从而减少了攻击面。
SSH ProxyJump和ProxyCommand命令决定客户端如何通过跳转服务器、跳转主机连接到远程服务器,或堡垒服务器。
本指南重点介绍 Linux 中的 SSH ProxyJump 和 SSH Proxy Command。
使用 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 <:port>
为了演示 ProxyJump 标志的作用,我们有一个简单的设置,如图所示。
Jump Server IP: 173.82.232.55 User: james Remote Target IP: 173.82.227.89 User: tecmint
要使用 Jump 服务器连接到远程目标,命令如下所示。
$ ssh -J
该命令将提示您输入跳转服务器的用户密码,然后是目标系统的密码,您将被授予访问目标系统的权限。

在 ~/.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 是跳转主机以到达远程目标的唯一方式。它的工作原理是通过跳转服务器或堡垒从远程目标转发标准输入(标准输入)和标准输出(标准输出)。
ProxyCommand 采用以下语法。
$ ssh -o ProxyCommand="ssh -W %h:%p <jump server>" <remote target>
这里,-W
到 %h:%p
参数将 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 的更好替代品,它提供了一种更简单、无缝的方式来通过跳转主机连接到远程目标。