0%

SSH 端口转发

一些文档通过画图的方式介绍端口转发使用场景,但感觉让有的人更迷糊

本文尝试通过举例和解读的方式帮助快速理解和记忆,以达到活学活用

老规矩,通过man手册man ssh看到ssh端口转发有如下常见的三种

  • 本地端口转发
  • 远程端口转发
  • 动态端口转发

本地端口转发

ssh [-L address] [user@]hostname
为了便于区分,把hostname改为ssh-server,如下:
ssh [-L address] [user@]ssh-server

1
2
3
4
-L [bind_address:]port:host:hostport
-L [bind_address:]port:remote_socket
-L local_socket:host:hostport
-L local_socket:remote_socket

举例

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
2
3
4
5
-R [bind_address:]port:host:hostport
-R [bind_address:]port:local_socket
-R remote_socket:host:hostport
-R remote_socket:local_socket
-R [bind_address:]port

举例

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)转发