什么是反向SSH隧道? (以及如何使用)

时间:2020-01-09 10:44:11  来源:igfitidea点击:

需要通过SSH连接到无法访问的Linux计算机吗?让它打电话给我们,然后深入该连接以获取我们自己的远程SSH会话。我们向我们展示如何。

当我们想使用反向SSH隧道时

有时,远程计算机可能很难到达。他们所在的站点可能具有严格的防火墙规则,或者本地管理员已经设置了复杂的网络地址转换规则。如果需要连接到这样的计算机,该如何找到它?

让我们建立一些标签。计算机是本地计算机,因为它在我们附近。我们要连接的计算机是远程计算机,因为它与位置不同。

为了区分本文中使用的本地计算机和远程计算机,远程计算机称为theitroad,运行的是Ubuntu Linux(带有紫色终端窗口)。本地计算机称为Sulaco,运行的是Manjaro Linux(带有黄色终端窗口)。

通常,我们需要从本地计算机启动SSH连接,然后连接到远程计算机。在我们描述的网络场景中,这不是一个选择。真正的网络问题并不重要,这在我们无法直接通过SSH直接连接到远程计算机时很有用。

但是,如果我们一端的网络配置很简单,则远程计算机可以连接到我们。但是,仅凭此一项不足以满足需求,因为它不能为我们提供远程计算机上有效的命令行会话。但这是一个开始。我们在两台计算机之间建立了连接。

答案在于反向SSH隧道。

什么是反向SSH隧道?

反向SSH隧道允许我们使用已建立的连接来建立从本地计算机到远程计算机的新连接。

因为原始连接是从远程计算机到,所以将其用于另一个方向则相反地使用它;并且由于SSH是安全的,因此我们正在将安全连接放入现有的安全连接中。这意味着我们与远程计算机的连接充当原始连接内的专用隧道。

因此,我们得出了反向SSH隧道的名称。

它是如何工作的?

反向SSH隧道依赖于使用已建立连接的远程计算机来侦听来自本地计算机的新连接请求。

远程计算机在本地计算机上的网络端口上侦听。如果它检测到对该端口的SSH请求,则会通过已建立的连接将该连接请求中继回自身。这提供了从本地计算机到远程计算机的新连接。

设置起来比描述起来容易。

使用SSH反向隧道

SSH已经安装在Linux计算机上,但是如果本地计算机以前从未接受过SSH连接,则可能需要启动SSH守护程序(sshd)。

sudo systemctl start sshd

要在每次重新启动计算机时启动SSH守护程序,请使用以下命令:

sudo systemctl enable sshd

在远程计算机上,我们使用以下命令。

  • -R(反向)选项告诉ssh,必须在远程计算机上创建新的SSH会话。

  • 43022:localhost:22告诉ssh`与本地计算机上的端口43022的连接请求应转发到远程计算机上的端口22. 选择了端口43022,因为它被列为未分配。这不是一个特殊的数字。

  • [email protected]是远程计算机要在本地计算机上连接的用户帐户。

ssh -R 43022:localhost:22 [email protected]

我们可能会收到有关从未连接过本地计算机的警告。或者,因为连接详细信息已添加到已识别的SSH主机列表中,我们可能会看到一条警告。我们看到的内容取决于是否从远程计算机建立了到本地计算机的连接。

系统将提示我们输入用于连接到本地计算机的帐户的密码。

请注意,建立连接后,命令提示符将从dave @ theitroad更改为dave @ sulaco。

现在,我们已从远程计算机连接到本地计算机。这意味着我们可以向其发出命令。让我们使用" who"命令来查看本地计算机上的登录信息。

who

我们可以看到具有名为dave的用户帐户的人已登录到本地计算机,并且远程计算机已从IP地址192.168.4.25连接(使用相同的用户凭据)。

连接到远程计算机

因为来自远程计算机的连接成功,并且正在侦听连接,所以我们可以尝试从本地计算机连接到远程计算机。

远程计算机正在侦听本地计算机上的端口43022. 有点反常地连接到远程计算机,我们要求ssh在端口43022上与本地计算机建立连接。该连接请求将转发到远程计算机。

ssh localhost -p 43022

系统提示我们输入用户帐户密码,然后从本地计算机连接到远程计算机。我们的Manjaro计算机愉快地说,欢迎使用Ubuntu 18.04.2 LTS。

请注意,命令提示符已从dave @ sulaco更改为dave @ theitroad。我们已经实现了与难以访问的远程计算机建立SSH连接的目标。

通过密钥使用SSH

为了使从远程计算机到本地计算机的连接更加方便,我们可以设置SSH密钥。

在远程计算机上,键入以下命令:

ssh-keygen

系统将提示我们输入密码。我们可以按Enter键忽略密码短语问题,但是不建议这样做。这意味着远程计算机上的任何人都可以与本地计算机建立SSH连接,而无需输入密码。

由符号分隔的三个或者四个单词将构成一个可靠的密码短语。

将会生成SSH密钥。

我们需要将公钥转移到本地计算机。使用此命令:

ssh-copy-id [email protected]

系统将提示我们输入要登录的用户帐户的密码,在本例中为[email protected]

第一次从远程计算机向本地计算机发出连接请求时,我们必须提供密码。只要该终端窗口保持打开状态,就无需为以后的连接请求再次输入密码。

并非所有隧道都令人恐惧

有些隧道可能是黑暗而曲折的,但是如果我们可以将远程计算机和本地计算机之间的关系摆在脑海中,那么反向SSH隧道就不太难导航。然后将其反转。