跳到主要内容

SSH 端口转发

· 阅读需 3 分钟

前言

SSH 除了能连接远程服务器外,还可以做端口转发的工作,并且利用安全隧道来保障通信安全。

动态转发

动态转发指的是 SSH 在本机暴露一个 SOCKS5 端口,通过此端口进行的所有通信都转发到远程服务器,通过远程服务器访问外网。通过这种方式可以实现一个简易代理。

ssh -D local-port tunnel-host -N
  • -D,动态转发;
  • -N,不打开 Shell,只进行端口转发。

下面这条命令的用途是通过本机2121端口的流量都会被转发到tunnel-host,然后通过tunnel-host再发送该流量。

ssh -D 2121 tunnel-host -N

可以写在 ssh_config(~/.ssh/config)中。

DynamicForward <tunnel-host>:<local-port>

本地转发

本地转发指的是 SSH 在本机暴露一个端口,通过此端口的请求都会转发到远程服务器,然后远程服务器会将请求转发到目标服务器的目标端口。

ssh -L local-port:target-host:target-port tunnel-host

下面这条命令的用途是,当访问本地2121端口时,流量会被转发到tunnel-host,再由tunnel-host把流量发送到www.example.com:80

ssh -L 2121:www.example.com:80 tunnel-host -N

可以写在 ssh_config(~/.ssh/config)中。

Host test.example.com
LocalForward client-IP:client-port server-IP:server-port

远程转发

远程转发指的是在远程主机监听某个端口,通过该端口的流量都转发到本机,再通过本机发送该流量。

ssh -R remote-port:target-host:target-port -N remotehost

下面这条命令的作用是通过远程主机8080端口的流量都转发到本地主机的80端口。

ssh -R 8080:localhost:80 -N my.public.server

可以写在 ssh_config(~/.ssh/config)中。

Host remote-forward
HostName test.example.com
RemoteForward remote-port target-host:target-port

参考资料