当前位置: 首页 > 科技观察

在Fedora上使用SSH端口转发

时间:2023-03-13 23:11:07 科技观察

您可能已经熟悉使用ssh命令访问远程系统。ssh命令背后使用的协议允许终端输入和输出通过安全通道流动。但是您知道您还可以使用ssh安全地发送和接收其他数据吗?一种方法是使用“端口转发”,它允许您在进行ssh会话时安全地连接到网络端口。本文向您展示它是如何工作的。关于端口一个标准的Linux系统被分配了一组网络端口,范围从0-65535。端口0-1023保留给系统使用。在许多系统上,您没有使用这些低端口号的选项。通常有几个端口用于运行特定的服务。您可以在系统的/etc/services文件中找到这些定义。您可以将网络端口视为可以连接到电缆的类似物理端口或插孔。端口可以??连接到系统上的某种服务,类似于物理插孔后面的布线。ApacheWeb服务器(也称为httpd)就是一个例子。Web服务器通常需要主机系统上的端口80用于HTTP非安全连接和443用于HTTPS安全连接。当您连接到远程系统时(例如,使用Web浏览器),您将浏览器“连接”到主机上的端口。这通常是一个随机的高端口号,例如54001。您主机上的一个端口连接到远程主机上的一个端口(例如443)以访问其安全Web服务器。那么,当您有这么多可用端口时,为什么还要使用端口转发呢?以下是Web开发人员生活中的一些常见情况。本地端口转发假设您正在一个名为remote.example.com的远程系统上进行Web开发。通常,您会通过ssh进入该系统,但它位于防火墙后面,很少允许其他类型的访问并阻止大多数其他端口。要试用您的Web应用程序,能够使用浏览器访问远程系统会很有帮助。但是,由于存在讨厌的防火墙,您无法通过在浏览器中键入URL的通常方式访问它。本地转发允许您通过ssh连接以建立可通过远程系统访问的端口。该端口在系统上显示为本地端口(因此名称为“本地转发”)。假设您的Web应用程序正在remote.example.com上的8000端口上运行。要将该系统上的端口8000本地转发到您系统上的端口8000,请在启动会话时使用带有ssh的-L选项:$ssh-L8000:localhost:8000remote.example.com等。为什么我们使用localhost作为转发目标?这是因为从remote.example.com的角度来看,您要求主机使用它自己的端口8000。(回想一下,任何主机通常都可以通过到本地主机的网络连接来连接到它自己。)那个端口现在连接到端口8000你的系统。ssh会话准备就绪后,保持打开状态,您可以在浏览器中键入http://localhost:8000以查看您的Web应用程序。系统之间的流量现在可以通过ssh安全地传输!如果你有一双敏锐的眼睛,你可能已经注意到了一些事情。如果我们希望remote.example.com转发到与本地主机不同的主机名怎么办?如果它可以访问该网络上另一个系统上的端口,它通常可以同样轻松地转发该端口。例如,假设您想要访问也在该远程网络上的db.example.com上的MariaDB或MySQL服务。该服务通常在端口3306上运行。因此,即使您无法通过ssh连接到实际的db.example.com主机,也可以使用此命令将其转发:$ssh-L3306:db.example.com:3306remote。example.com现在,您可以在本地主机上使用ssh在上运行MariaDB命令,同时实际使用db.example.com主机。远程端口转发远程转发允许您做相反的事情。想象一下,您正在为办公室的朋友设计一个Web应用程序,并想向他们展示您的作品。但不幸的是,您在咖啡店工作,由于网络设置,他们无法通过网络连接访问您的笔记本电脑。但是,您还在使用办公室的remote.example.com系统,仍然可以在那里登录。您的Web应用程序似乎在本地端口5000上运行良好。远程端口转发允许您通过ssh连接从本地系统传输端口,并使该端口在远程系统上可用。只需在启动ssh会话时使用-R选项:$ssh-R6000:localhost:5000remote.example.com现在,当企业防火墙内的朋友打开浏览器时,他们可以访问http://remote。example.com:6000查看您的工作。就像在本地端口转发示例中一样,通信通过ssh会话安全地发生。默认情况下,sshd守护进程在设置的主机上运行,??因此只有该主机可以连接到其远程转发端口。假设您的朋友希望能够向其他example.com公司主机上不在remote.example.com上的人展示您的作品。您需要要求remote.example.com主机的所有者向/etc/ssh/sshd_config添加以下选项之一:GatewayPortsyes#或GatewayPortsclientspecified第一个选项表示remote.example.com上的所有网络接口都是可以远程使用端口转发。第二种表示建立隧道的客户端可以选择地址。默认情况下,此选项设置为否。使用此选项,作为ssh客户端的您仍然必须指定可以在您这边共享转发端口的接口。通过在本地端口之前添加网络地址范围来执行此操作。有几种方法可以做到这一点,包括:$ssh-R*:6000:localhost:5000#所有网络$ssh-R0.0.0.0:6000:localhost:5000#所有网络$ssh-R192.168.1.15:6000:localhost:5000#Singlenetwork$ssh-Rremote.example.com:6000:localhost:5000#Singlenetwork其他注意事项请注意,本地和远程系统上的端口号不必相同。事实上,有时您甚至可能无法使用同一个端口。例如,普通用户可能不会转发到默认设置中的系统端口。此外,可以限制主机上的转发。如果您需要网络主机上更严格的安全性,这对您可能很重要。sshd守护进程的PermitOpen选项控制是否以及哪些端口可用于TCP转发。默认设置为任何,这使得上面的所有示例都有效。要禁止任何端口转发,请选择无,或仅允许特定主机:端口。有关详细信息,请搜索PermitOpen的手册页以配置sshd守护程序:$mansshd_config最后,请记住端口转发仅在ssh会话打开时完成。如果您需要长时间保持转发活动状态,请尝试使用-N选项在后台运行会话。确保控制台已锁定,以防止在您离开控制台时被盗用。