如何在 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 ProxyJumpProxyCommand命令决定客户端如何通过跳转服务器跳转主机连接到远程服务器,或堡垒服务器

本指南重点介绍 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 的更好替代品,它提供了一种更简单、无缝的方式来通过跳转主机连接到远程目标。