文章目录
- Ubuntu/Linux SSH 端口转发
- 概述
- 本地端口转发
- 场景一
- 场景二
- 参考资料
Ubuntu/Linux SSH 端口转发
概述
SSH, Secure Shell 是一种在网络上用于安全远程登录到另一台机器的工具。除了远程登录以外,ssh 的端口转发是它的另一项强大功能。通过 ssh 端口转发功能可以将一个端口的流量转发到另一个端口,实现端口间的数据转发。本文重点介绍本地端口转发(local port forwarding),其余两种(远程端口、动态端口)转发会在后续的时间进行补充说明。
关于 ssh
命令的具体用法可以在命令行输入 man ssh
查阅官方手册。命令行输入:
man ssh
本地端口转发
语法:
ssh -L [bind_address:]port:host:hostport [user@]destination
说明:
bind_address
: 默认绑定的是127.0.0.1
地址,可以配置成0.0.0.0
绑定所有网卡地址,也可以只配置外部访问的 IP 地址。port
: 指定本地的端口,用于进行端口转发用host
: 需要端口转发过去的主机地址hostport
: 需要端口转发过去的主机端口[user@]destination
: 远程登录到中转的机器
配合 -N
参数,不执行远程命令,进行端口转发的时候该参数非常有用。
场景一
示例说明:
-
在 Linux Server 服务器上执行以下指令:
ssh -NL 172.16.5.136:6667:192.168.10.10:22 172.16.5.136
将访问本地机器
172.16.5.136
的6667
端口的流量转发到192.168.10.10
的22
端口。注意:命令执行后处于前台运行状态,可以通过
Ctrl-Z
将其转入后台运行。在需要的情况下再使用fg
命令切换回前台运行状态。 -
在 Linux Server 服务器上检查是否已开启端口转发功能:
netstat -antulp | grep 6667
-
在 Client 上登录到 Inner Device:
ssh -p 6667 device_user@172.16.5.136
在上面的示例中,我们配置了 Linux Server 作为中转站进行端口转发,外部机器可通过 6667
端口直接访问到内部设备 192.168.10.10
的 22
端口,在外部机器与内部设备间建立起了一条通讯链路。通过指定端口,可以使用 scp -P
命令与内部设备进行文件传输。
scp -P 6667 local_file device_user@172.16.5.136:/path/of/file
或者从内部设备传输文件到客户端:
scp -P 6667 device_user@172.16.5.136:/path/of/file local_file
场景二
如果由于网络或权限原因,无法在 Linux Server 配置端口转发,但是 Client forward 依然能够正常与 Linux Server 通讯的情况下,则可以在 Client forward 执行端口转发功能的配置。
示例说明:
-
在 Client forward 执行以下指令:
ssh -NL 10.132.5.86:6667:192.168.10.10:22 172.16.5.136
将访问本地机器
10.132.5.86
的6667
端口的流量经过 ssh 安全连接172.16.5.136
转发到192.168.10.10
的22
端口。注意:命令执行后处于前台运行状态,可以通过
Ctrl-Z
将其转入后台运行。在需要的情况下再使用fg
命令切换回前台运行状态。 -
在 Client forward 服务器上检查是否已开启端口转发功能:
netstat -antulp | grep 6667
-
在 Client 上登录到 Inner Device:
ssh -p 6667 device_user@10.132.5.86
Client 与 Inner Device 文件传输的用法参考场景一的说明。
参考资料
[1] 一文彻底搞懂ssh的端口转发