如何在 Linux 上设置反向 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 会话不受用户注销时可能发生的挂起的影响。
相关文章
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Linux 中计算文件中的唯一行
发布时间:2023/05/04 浏览次数:70 分类:操作系统
-
计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数