在 Linux 上启用 SSH 端口转发
大多数 Linux 用户都熟悉 SSH 协议,因为它允许远程管理任何 Linux 系统。它也常用于 SFTP 下载或上传文件。 SSH 被认为是一种非常安全的协议,因为它对流量进行端到端加密。但它创建的加密隧道实际上非常通用,不仅仅可用于远程服务器管理或文件传输。
SSH 端口转发可用于加密两个系统之间几乎任何协议的流量。这是通过创建安全隧道然后通过该隧道路由另一个协议的流量来实现的。从原理上讲,它的工作原理与 VPN 非常相似。
在本指南中,我们将逐步介绍如何使用 SSH 端口转发为其他应用程序创建安全隧道。例如,我们将为 telnet 协议创建端口转发,由于它以明文形式传输数据,因此通常会避免这种情况。这将确保协议的安全并使其使用安全。
在本教程中您将学习:
如何使用 SSH 端口转发
如何创建持久 SSH 隧道
在Linux上通过端口转发创建SSH隧道
如何使用 SSH 端口转发
SSH 端口转发的工作原理是将流量从本地系统上的特定端口转发到远程系统上的端口。两个端口不必相同。例如,我们将本地系统上的端口 4500 转发到远程系统上的端口 23 (telnet)。
您不必以 root 身份执行此操作。由于我们使用高于 1024 的端口,普通用户可以创建此端口转发连接。请记住,仅当 SSH 连接运行时才会建立隧道。
$ ssh -L 4500:127.0.0.1:23 user@linuxconfig.org
让我们剖析一下这个命令中发生了什么。
-L
– 此选项告诉 SSH 我们要通过端口转发创建隧道。4500
– 我们将通过其发送流量的本地系统上的端口。127.0.0.1
– 这是我们本地系统的环回地址。23
– 我们尝试连接的远程端口。user
– 用于登录远程服务器上的 SSH 的用户名。linuxconfig.org
– 远程服务器 IP 或域名。
此时,本地主机上使用端口 4500 的每个连接都将被重定向到远程端口 23。
创建从本地端口 4500 到远程端口 23 的 SSH 隧道
在上面的屏幕截图中,我们已成功创建到远程服务器的隧道。正如您所看到的,它看起来像典型的 SSH 登录。但现在,在我们的本地系统上,我们可以通过端口 4500 路由流量来访问远程系统的 telnet 服务。
$ telnet 127.0.0.1 4500
我们将打开一个新终端并在我们的测试系统上尝试此操作,同时保持另一个终端打开,以便它维护我们的 SSH 隧道。
使用 telnet 连接到远程服务器,并通过 SSH 路由流量以确保安全
正如您所看到的,我们现在打开了一个到远程服务器的 telnet 会话,但它是一个安全连接,因为它是通过我们在另一个终端中建立的现有 SSH 隧道发送的。
这里的所有都是它的。您可以将 SSH 隧道用于任何类型的流量。需要记住的是,您应该将应用程序指向本地主机地址 (127.0.0.1) 以及为 SSH 隧道配置的端口号。
如何创建持久 SSH 隧道
您可能已经注意到,对于长期的 SSH 隧道,它依赖于我们打开的 SSH 连接,这是相当不方便的。如果存在临时延迟或 SSH 终端超时,隧道将与 SSH 会话一起被关闭。
如果您想创建一个在出现故障时自动恢复的隧道,您可以使用系统的包管理器安装 autossh
实用程序。您需要为无密码 SSH 配置 RSA 密钥才能使此方法发挥作用。
构建持久隧道的语法与普通的 SSH 方法基本相同。
$ autossh -L 4500:127.0.0.1:23 user@linuxconfig.org
结束语
在本指南中,我们了解了如何在 Linux 上使用 SSH 端口转发。这允许用户构建安全的 SSH 隧道,其他应用程序和协议可以利用该隧道来加密与远程服务器的连接。作为示例,我们了解了如何通过 SSH 端口转发来保护 telnet 协议的安全。我们还学习了如何使用 autossh 实用程序保持 SSH 隧道的持久性。