一些文档通过画图的方式介绍端口转发使用场景,但感觉让有的人更迷糊
本文尝试通过举例和解读的方式帮助快速理解和记忆,以达到活学活用
老规矩,通过man手册man ssh
看到ssh端口转发有如下常见的三种
- 本地端口转发
- 远程端口转发
- 动态端口转发
本地端口转发
ssh [-L address] [user@]hostname
为了便于区分,把hostname
改为ssh-server
,如下:
ssh [-L address] [user@]ssh-server
1 | -L [bind_address:]port:host:hostport |
举例
1 | ssh -N -f -L 127.0.0.1:2222:192.168.1.2:22 root@192.168.1.1 |
-N
只连接-f
后台运行
解读: 连接本机的2222端口通过SSH隧道(ssh-server)转发到192.168.1.2(host)的22端口
ssh-server(192.168.1.1)和host(192.168.1.2)可以是同一台主机也可以不是;ssh-server和host网络通信正常即可
远程端口转发
ssh [-R address] [user@]ssh-server
1 | -R [bind_address:]port:host:hostport |
举例
1 | ssh -N -f -R 192.168.1.1:2222:127.0.0.1:22 root@192.168.1.1 |
解读: 连接远程主机(192.168.1.1)的2222端口通过SSH隧道(ssh-server)转发到127.0.0.1(host)的22端口
host(127.0.0.1)可以是本机也可以不是;host和本机(即ssh客户端)网络通信正常即可
动态端口转发
ssh [-D [bind_address:]port] [user@]ssh-server
1 | -D [bind_address:]port |
一般用作科学上网用
1 | ssh -N -f -D 36000 root@43.x.x.29 |
解读: 浏览器等可将代理设置为本机的36000端口,这样对外发起的请求将通过ssh-server(43.x.x.29)转发