云网牛站
所在位置:首页 > Linux云服务器 > 在Fedora Linux上使用SSH本地端口转发及远程端口转发的方法

在Fedora Linux上使用SSH本地端口转发及远程端口转发的方法

2019-11-13 15:45:07作者:戴进稿源:云网牛站

本文介绍在Fedora Linux操作系统上使用SSH端口转发的方法(本地及远程端口转发)。你可能已经熟悉使用ssh命令访问远程系统,ssh背后的协议允许终端输入和输出流经安全通道,但是你知道你也可以使用ssh安全地发送和接收其他数据吗?一种方法是使用端口转发,它允许你在进行ssh会话时安全地连接网络端口,本文向你展示了它是如何工作的。

在Fedora Linux上使用SSH本地端口转发及远程端口转发的方法

 

关于ports

标准Linux系统已分配了一组网络端口,范围是0-65535,你的系统最多保留1023个端口供系统使用,在许多系统中,你不能选择使用这些低编号端口之一,通常希望有几个端口可以运行特定的服务,你可以在系统的/etc/services文件中找到这些定义。

你可以想到网络端口,例如可以连接电缆的物理端口或插孔,该端口可以连接到系统上的某种服务,例如该物理插孔后面的接线,一个示例是Apache Web服务器(也称为httpd,参考在Debian 10 Linux上安装Apache Web Server的方法),对于HTTP非安全连接,Web服务器通常要求在主机系统上使用80端口,对于HTTPS安全连接通常要求443使用。

当你连接到远程系统(例如,使用Web浏览器)时,你还将浏览器连接到主机上的端口,这通常是一个随机的高端口号,例如54001,主机上的端口连接到远程主机上的端口(例如443)以访问其安全的Web服务器。

那么,当你有这么多可用端口时,为什么还要使用端口转发呢?这是Web开发人员生活中的几种常见情况。

参考:在Linux系统中检查(扫描)开放端口的方法

 

本地端口转发(Local port forwarding)

想象一下,你正在一个名为remote.example.com的远程系统上进行Web开发,通常,你是通过ssh到达此系统的,但它位于防火墙后面,该防火墙允许很少的其他访问,并阻止大多数其他端口,要试用你的网络应用,能够使用网络浏览器指向远程系统会很有帮助,但是,由于使用了讨厌的防火墙,你无法通过在浏览器中键入URL的常规方法来访问它。

本地转发使你可以通过ssh连接建立通过远程系统可用的端口的隧道,该端口在系统上显示为本地端口(因此为“本地转发(local forwarding)”。)

假设你的网络应用正在remote.example.com框的8000端口上运行,要将系统的8000端口本地转发到系统的8000端口,请在启动会话时对ssh使用-L选项:

$ ssh -L 8000:localhost:8000 remote.example.com

等等,为什么我们使用本地主机作为转发目标?这是因为从remote.example.com的角度来看,你是在要求主机使用其自己的8000端口。(回想一下,任何主机通常都可以将其自身称为localhost,以通过网络连接来与其自身进行连接。)现在,该端口连接到系统的8000端口,ssh会话准备就绪后,将其保持打开状态,然后可以在浏览器中键入http://localhost:8000来查看你的Web应用程序,系统之间的流量现在可以通过ssh隧道安全地传输。

如果我们使用与localhost不同的主机名来转发remote.example.com怎么办?如果它可以到达其网络上另一个系统上的端口,则通常可以同样轻松地转发该端口,例如,假设你想在远程网络上的db.example.com框中访问MariaDB或MySQL服务,该服务通常在3306端口上运行,因此,即使你无法SSH到实际的db.example.com主机,也可以使用此命令将其转发:

$ ssh -L 3306:db.example.com:3306 remote.example.com

现在,你可以对本地主机运行MariaDB命令,并且实际上是在使用db.example.com框。

 

远程端口转发(Remote port forwarding)

远程转发使你可以相反的方式进行操作,想象一下,你正在为办公室的朋友设计一个Web应用程序,并想向他们展示你的工作,不过,不幸的是,由于网络设置,他们无法通过网络连接到达您的笔记本电脑,但是,你俩都在办公室使用remote.example.com系统,仍然可以在该处登录,你的Web应用程序似乎在本地5000端口上运行良好。

远程端口转发使你可以通过ssh连接从本地系统建立端口的隧道,并使该端口在远程系统上可用,在开始ssh会话时,只需使用-R选项:

$ ssh -R 6000:localhost:5000 remote.example.com

现在,当你在公司防火墙内的朋友运行其浏览器时,他们可以将其指向http://remote.example.com:6000并查看你的工作,就像在本地端口转发示例中一样,通信在ssh会话中安全地进行。

默认情况下,主机上运行的sshd守护程序被设置为仅该主机可以连接到其远程转发端口,假设你的朋友希望能够让其他example.com公司托管平台上的人看到你的工作,而他们本身不在remote.example.com上,你需要remote.example.com主机的所有者将以下选项之一添加到该框中的/etc/ssh/sshd_config中:

GatewayPorts yes  # OR

GatewayPorts clientspecified

第一个选项表示远程转发的端口在remote.example.com的所有网络接口上均可用,第二种方法是,建立隧道的客户端可以选择地址,默认情况下,此选项设置为no。

使用此选项,作为ssh客户端,你仍然必须指定可以共享你端已转发端口的接口,为此,可以在本地端口之前添加网络规范,有几种方法可以做到这一点,包括:

$ ssh -R *:6000:localhost:5000  # all networks

$ ssh -R 0.0.0.0:6000:localhost:5000  # all networks

$ ssh -R 192.168.1.15:6000:localhost:5000  # single network

$ ssh -R remote.example.com:6000:localhost:5000  # single network

 

其他注意事项

请注意,本地和远程系统上的端口号不必相同,实际上,有时你甚至可能无法使用相同的端口,例如,普通用户可能不会在默认设置中转发到系统端口。

此外,可以限制主机上的转发,如果你需要在联网主机上更严格的安全性,这对你来说可能很重要, sshd守护程序的PermitOpen选项控制是否以及哪些端口可用于TCP转发,默认设置是any,这允许上面的所有示例都能正常工作,要禁止任何端口转发,请选择无,或仅选择允许的特定host:port设置,有关更多信息,请在手册页中搜索PermitOpen以进行sshd守护程序配置:

$ man sshd_config

最后,请记住,只有在控制ssh会话打开的情况下,端口转发才发生,如果需要长时间保持转发活动,请尝试使用-N选项在后台运行会话,确保控制台已锁定,以防止在你离开控制台时对其进行篡改。

 

相关主题

通过SSH在远程Linux操作系统上执行命令的方法

精选文章
热门文章