SSH 端口转发的三种类型
本地转发
本地转发是将远程端口转发到本地,可以用于在本地访问远程服务,本地转发通过ssh命令的-L参数指定本地端口、远程IP和端口。
比如ssh -L 8080:127.0.0.1:8888 root@192.168.1.1,SSH 连接后,本地主机访问本地 8080 端口就相当于访问远程主机的 8888 端口,注意这里的 127.0.0.1 并不是本地主机的 127.0.0.1,而是远程主机的 127.0.0.1,当然也可以类似这样ssh -L 8080:192.168.1.10:8888 root@192.168.1.1访问远程局域网的其他设备。
远程转发
远程转发相当于本地转发的反转,可以用于在远程访问本地服务,远程转发通过ssh命令的-R参数指定远程端口、本地IP和端口。
比如ssh -R 8080:127.0.0.1:8888 root@123.123.123.123,SSH 连接后,远程主机访问本地 8080 端口就相当于访问本地主机的 8888 端口,当然也可以类似这样ssh -L 8080:192.168.1.10:8888 root@123.123.123.123让远程主机访问本地局域网的其他设备,就像本地转发那样。
动态转发
动态转发有些特殊,与其叫它转发,不如叫代理更为合适。因为它相当于在两个主机之间建立了一条 SOCKS 代理,本地主机可以使用这条代理来访问远程主机的任何服务,亦或者是使用远程主机的互联网。动态转发通过ssh命令的-D参数指定本地端口。
比如ssh -D 12345 root@123.123.123.123,SSH 连接后,本地主机的 12345 端口就会变成一条 SOCKS 代理,然后像这样curl -x socks://127.0.0.1:12345 http://127.0.0.1就可以访问远程主机的 Web 服务了。curl -x socks://127.0.0.1:12345 http://zhuawa.cn,也可以像这样使用远程主机的互联网访问任何服务。