SSH 隧道是一种安全的数据传输方法,它允许我们在不安全的网络上建立一个安全的连接。SSH 隧道提供两大功能:
SSH 隧道的主要功能之一是端口转发,它是一种通过 SSH 协议在本地和远程主机之间建立安全通道,实现端口之间的数据转发的方法。它允许用户在不直接访问目标主机的情况下,通过安全的 SSH 连接来访问该主机上的服务。
我们正在使用的一些 SSH 远程终端工具如:,也可以通过它的可视化界面来配置端口转发功能。
SSH端口转发具有广泛的用途,包括但不限于:
本地端口转发:数据从本地机器流向远程机器,然后从远程机器流回本地机器。
适用于需要访问位于防火墙后面或者只能在远程主机上访问的服务的情况。
远程端口转发:数据从远程机器流向本地机器,然后从本地机器流回远程机器。
适用于需要将远程主机上的某个服务映射到本地主机上,或者需要远程主机上的其他计算机访问本地主机上的服务的情况。
注意:远程端口转发通常需要在远程主机上进行配置。
SSH 关于端口转发会使用到的一些参数说明如下:
-C #压缩传输,增加传输的效率
-f #将 SSH 传输放在后台执行
-N #建立静默连接
-g #复用访问时作为网关,支持多主机访问本地监听端口
-L #本地端口转发
-R #远程端口转发
-D #动态转发
-P #指定 SSH 的端口
本地端口转发的命令格式是:
ssh -L local_port:remote_host:remote_port username@ssh_server
其中,local_port
本地机器上监听的端口,remote_host
是远程服务器的地址,remote_port
是远程服务器上服务的端口,username
是远程服务器的登录用户名,ssh_server
是用来建立SSH隧道的服务器地址。
远程端口转发的命令格式是:
ssh -R remote_port:local_host:local_port username@ssh_server
其中,remote_port
是远程服务器上监听的端口,local_host
是本地机器的地址,local_port
是本地机器上服务的端口。
例1:要将本地的8080端口转发到远程服务器的80端口,可以使用以下命令:
ssh -L 8080:localhost:80 username@sshserver
例2:要将远程服务器的8080端口转发到本地的80端口,可以使用以下命令:
ssh -R 8080:localhost:80 username@sshserver
在这些命令中,username@sshserver
是用来建立SSH隧道的初始登录信息。一旦建立了 SSH 隧道,就可以通过本地的8080端口访问远程服务器上的80端口,或者通过远程服务器的8080端口访问本地的80端口。
环境说明:我们想要在 A 与 B 服务器之间创建隧道,最终通过隧道访问到ServerC 中的 http 服务。
ServerA 与 ServerB 上没有开启任何 http 服务,ServerC 中开启了 http 服务并监听 8080 端口。
这里如果 ServerA 想要访问 ServerC 上运行的 http 服务,但由于网络限制,ServerA 无法直接访问 ServerC。因此,我们计划通过ServerB 作为跳板机,利用 SSH 端口转发来实现 ServerA 对 ServerC 的访问。
我们在 ServerA 上开启 ssh 隧道,命令如下:
ssh -N -L 8080:192.168.10.3:8080 root@192.168.10.2
现在 serverA 上已经开始监听 8080 端口了,默认是在本地回环地址上,需要其他机器访问的话可以指定 ip 或者增加 -g 参数开启网关模式。
[root@ServerA ~]# netstat -tunlp|grep 8888
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 32464/ssh
tcp6 0 0 ::1:8080 :::* LISTEN 32464/ssh
注:此模式下会存在数据安全问题,因为 ServerB 与 ServerC 之间的数据传输还是明文的,ServerA 与 ServerB 之间的数据传输是受 SSH 隧道保护的,所以,这里我们首先需要考虑的 ServerB 与 ServerC 之间的网络可靠性。
总之,SSH端口转发是一种强大的工具,可以通过SSH连接实现本地和远程主机之间的安全通信和数据转发。通过合理配置和使用SSH端口转发功能,可以方便地访问受限服务、绕过网络限制以及创建代理服务器等。
👍 如果你喜欢这篇文章,请点赞并分享给你的朋友!