如何在 Linux 上设置反向 SSH
【摘要】 反向 SSH 是一种可用于从外部世界访问系统(位于防火墙后面)的技术
反向 SSH 是一种可用于从外部世界访问系统(位于防火墙后面)的技术。
如您所知,SSH 是一种支持网络节点之间加密通信的网络协议。使用此协议,您可以进行安全的远程登录、从/到远程机器的安全复制等。
您通常会执行以下操作以使用ssh 命令安全地连接到远程服务器。
$ ssh [your-account-login]@[server-ip]
什么是反向 SSH?
SSH 是一个非常好的安全访问远程机器或服务器的工具。但是,当您尝试连接到防火墙后面的远程服务器并且此防火墙拒绝任何传入连接或没有先前传出请求的数据传输请求时,就会出现问题。这意味着只允许那些由远程服务器机器发起的连接。对于那些想要远程访问此服务器机器的人来说,这是一个真正的问题。
反向 SSH 提供了一种技术,您可以通过该技术模拟到此远程服务器计算机的正常 SSH。
主要问题是防火墙拒绝您的机器尝试与远程服务器机器建立的 ssh 连接。但是您知道,同一防火墙不会对源自服务器计算机的连接有任何问题。所以,为什么不请坐在防火墙后面的人做一些事情,以实现远程访问服务器的目标。为此,我们必须使用 ssh -R 选项。
这是手册页中 ssh -R 选项的描述:
-R [bind_address:]port:host:hostport
指定将远程(服务器)主机上的给定端口转发到本地端的给定主机和端口。这是通过分配一个套接字来侦听远程端的端口来实现的,并且每当与此端口建立连接时,都会通过安全通道转发连接,并从本地计算机建立与主机端口 hostport 的连接。
因此,您可以使用带有 -R 选项的 ssh 命令(在我们的例子中来自服务器)连接到您的机器,在那里分配一个端口,并确保该端口上的任何连接请求都转发到远程服务器的 ssh 端口。
服务器机器执行 ssh 并通过端口转发确保您可以 ssh 返回服务器机器,而不是您的机器执行 ssh。
如何创建反向 SSH 隧道?
这是您坐在远程服务器端的朋友应该在服务器上运行的命令:
ssh -fN -R 7000:localhost:22 username@yourMachine-ipaddress
因此,从远程服务器到您的机器的这个 ssh 连接请求将确保您机器上端口 7000 的任何 ssh 连接请求都转发到远程服务器的端口 22。
现在在端口 7000 上从您的机器向您自己的机器发出 ssh 连接请求:
ssh username@localhost -p 7000
在这里,尽管您似乎在 localhost 上执行 ssh,但您的请求将被转发到远程主机。因此,您应该在远程服务器上使用您的帐户“用户名”,并在提示输入密码时输入相应的密码。
这应该清楚与反向 ssh 技术相关的大部分方面。但是,有一个问题。问题是你必须先请你的一个朋友——他坐在防火墙后面——来创建一个 ssh 连接。这不是每次都可行的。
为了克服这个问题,您可以做的是设置一台不受防火墙限制的机器(就像您的机器一样),使其始终处于开启状态。让我们将此机器称为 machine_z。
machine_z 的好处是,您可以一次在其上设置反向 ssh,然后将其保留为这样。在任何时候,当您需要登录远程机器时,您可以在指定端口上 ssh 进入 machine_z(如前所示),您的连接请求将被转发到远程服务器机器,瞧,您将在远程运行命令服务器。
在相关说明中,您还可以设置无密码 SSH以在不输入密码的情况下连接到另一台服务器。
您需要在 machine_z 上配置的一些设置包括:
确保将参数 TCPKeepAlive、ClientAliveInterval、ClientAliveCountMax 和 GatewayPorts 设置为适当的值。这些参数位于 /etc/sshd_config 或/etc/ssh/sshd_config文件中
如果您对上述参数进行了一些更改,您应该重新启动 sshd 守护程序以反映更改。
此外,请确保使用nohup 命令运行第一个 ssh 命令(从远程服务器执行到 machine_z) ,以便此 ssh 会话不受用户注销时可能发生的挂起的影响。
链接:https://bbs.huaweicloud.com/blogs/371112
(版权归原作者所有,侵删)
微信扫码关注该文公众号作者