如何配置SSH隧道以及端口转发

linux

SSH隧道或SSH端口转发是一种在客户端和服务器之间创建加密SSH连接的方法,通过SSH隧道连接可以中继服务端口。

SSH转发对于传输未使用加密协议的服务(例如VNC或FTP),访问受地理限制的内容或绕过中间防火墙的网络数据很有用。基本上,您可以转发任何TCP端口并通过安全的SSH连接建立隧道。

三种类型的SSH端口转发:

  • 本地端口转发。 -连接从客户端主机转发到SSH服务器主机,然后转发到目标主机端口。
  • 远程端口转发。 -将端口从服务器主机转发到客户端主机,然后转发到目标主机端口。
  • 动态端口转发。 -创建SOCKS代理服务器,该服务器允许跨多个端口进行通信。

在教程中,我们将讨论如何配置本地,远程和动态端口转发的SSH隧道。我们分别举例了mysql和vnc以及自己编写应用的端口转发示例。3种端口转发方案中,请根据项目的实际应用。

本地端口转发

本地端口转发使您可以将本地(ssh客户端)计算机上的端口转发到远程(ssh服务器)计算机上的端口,然后再转发到目标计算机上的端口。

在这种类型的转发中,SSH客户端侦听指定的端口,并将与该端口的任何连接通过隧道传输到远程SSH服务器上的指定端口,然后再连接到目标计算机上的端口。目标计算机可以是远程SSH服务器或任何其他计算机。

本地端口转发通常用于连接到内部网络(例如数据库或VNC服务器)上的远程服务。在Linux,macOS和其他Unix系统中,创建本地端口转发使用-L选项传递给ssh客户端:

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [[email protected]]SSH_SERVER

使用的选项如下:

  • [LOCAL_IP:]LOCAL_PORT-本地计算机的IP和端口号。如果监听的是回环地址127.0.01 LOCAL_IP可省略。
  • DESTINATION:DESTINATION_PORT -目标机器的IP或主机名和端口。
  • [[email protected]]SERVER_IP -远程SSH用户和服务器IP地址。

可以将大于1024的任何端口号用作LOCAL_PORT。小于1024的端口号是特权端口,并且只能由root用户使用。如果您的SSH服务器正在侦听22 (默认)以外的端口,请使用-p [PORT_NUMBER]选项。

目标主机名必须可以从SSH服务器解析。假设您有一个MySQL数据库服务器在内部网络上的计算机db001.host上运行,并且可从计算机pub001.host访问的到db001.host计算机端口3306上,并且您想使用本地计算机mysql客户端连接到数据库服务器。您可以使用以下命令转发连接:

ssh -L 3336:db001.host:3306 [email protected]
此处省略了回环地址127.0.0.1

运行命令后,系统会提示您输入远程SSH用户密码。输入后,您将与远程服务器建立SSH隧道。如果你设置基于SSH密钥的身份验证,不输入密码也可连接到服务器。

现在,假设你想用使用mysql客户端连接到db001.host:3306MySQL服务器,你只需执行此命令mysql -u root -h 127.0.0.1:3336,即可连接mysql服务器。此时连接将通过充当中间服务器的pub001.host计算机转发到db001.host:3306MySQL服务器。

您可以在一个ssh命令中将多个端口转发到多个目标。例如,您在计算机db002.host上运行了另一台MySQL数据库服务器,并且想要从本地客户端连接到这两个服务器,您将运行:

ssh -L 3336:db001.host:3306 3337:db002.host:3306 [email protected]

要连接到第二台服务器,请使用127.0.0.1:3337。如果目标主机与SSH服务器在同一计算机上,则可以使用localhost作为远程主机。

ssh -L 3336:localhost:3306 [email protected]

假设您需要通过VNC连接到远程计算机,ssh服务和VNC服务都在同一服务器上运行,并且无法从外部访问。您将使用的命令是:

ssh -L 5901:127.0.0.1:5901 -N -f [email protected]

-f选项告诉ssh命令在后台运行,-N告诉ssh不要执行远程命令。这里使用127.0.0.1是因为VNC和SSH服务在同一服务器上运行。如果在设置隧道时遇到问题,请检查远程SSH服务器配置,并确保AllowTcpForwarding设置为yes,默认情况下是允许转发。

远程端口转发

远程端口转发与本地端口转发相反。它允许您将远程(ssh服务器)计算机上的端口转发到本地(ssh客户端)计算机上的端口,然后再转发到目标计算机上的端口。

在这种类型的转发中,SSH服务器侦听指定端口,并将与该端口的连接通过隧道传输到本地SSH客户端上的指定端口,然后本地SSH客户端连接到目标计算机上的端口。目标计算机可以是本地计算机,也可以是其他计算机。

在Linux,macOS和其他Unix系统中,要创建远程端口转发,请将-R选项传递给ssh客户端:

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [[email protected]]SSH_SERVER

使用的选项如下:

  • [REMOTE:]REMOTE_PORT-远程SSH服务器上的IP和端口号。空的REMOTEIP地址表示远程SSH服务器将在所有接口(有的计算机会有多个网卡)上绑定。
  • DESTINATION:DESTINATION_PORT -目标计算机的IP或主机名和端口。
  • [[email protected]]SERVER_IP -远程SSH用户和服务器IP地址。

本地端口转发通常用于使外部人员可以访问内部服务。假设您正在本地计算机上开发Web应用程序,并且想向开发人员显示预览。您没有公共IP,因此其他开发人员无法通过Internet访问你的应用程序。如果您可以访问远程SSH服务器,则可以按照以下步骤设置远程端口转发:

ssh -L 8080:127.0.0.1:3000 -N -f [email protected]

上面的命令将使ssh服务器在端口8080上侦听,并将所有从8080端口连接传输到端口3000上的本地计算机。

现在,您的同伴开发人员可以在浏览器中输入the_ssh_server_ip:8080并预览您的应用程序。如果您在设置远程端口转发时遇到问题,请确保在远程SSH服务器配置中将GatewayPorts设置为yes

动态端口转发

动态端口转发使您可以在充当SOCKS代理服务器的本地(ssh客户端)计算机上创建套接字。当客户端连接到该端口时,连接将转发到远程(ssh服务器)计算机,然后再转发到目标计算机上的动态端口。这样,所有使用SOCKS代理的应用程序都将连接到SSH服务器,并且服务器会将所有流量转发到其实际目的地。

在Linux,macOS和其他Unix系统中,创建动态端口转发(SOCKS),请将-D选项传递给ssh客户端:

ssh -R [LOCAL_IP:]LOCAL_PORT [[email protected]]SSH_SERVER

使用的选项如下:

  • [LOCAL_IP:]LOCAL_PORT-本地计算机的IP和端口号。如果省略LOCAL_IP,则ssh客户端将绑定到本地主机。
  • ​​ [[email protected]]SERVER_IP -远程SSH用户和服务器IP地址。

动态端口转发的典型示例是通过SSH服务器建立Web浏览器流量的隧道。以下命令将在端口9090上创建SOCKS隧道:

ssh -D 9090 -N -f [email protected]

建立隧道后,您可以配置应用程序以使用它。 本文介绍了如何配置Firefox和Google Chrome浏览器以使用SOCKS代理。必须为要通过其传输流量的每个应用程序分别配置端口转发。

结论

我们向您展示了如何设置SSH隧道并通过安全的SSH连接转发流量。为了易于使用,您可以在SSH配置文件中定义SSH隧道,或创建SSH隧道的Bash别名。如果您遇到问题或有反馈,请在下面发表评论。

以上是 如何配置SSH隧道以及端口转发 的全部内容, 来源链接: utcz.com/z/507380.html

回到顶部