Alice 和 Bob 在一家公司工作,公司网络在防火墙后面。在外网有一个服务器 123.7.8.9:8090 上有一个 web 服务器。 Alice 想访问,但是公司防火墙只开通的 22 端口,其他端口都封闭了。
Bob 在外网放了一台机器,123.4.5.6 ,提供了 SSH 服务。 Bob 可以帮助 Alice
Bob 在自己的电脑(192.168.0.1)上,登陆 123.4.5.6
ssh -L 0.0.0.0:8080:123.7.8.9:8090 bob@123.4.5.6
然后 alice 就可以访问 http://192.168.0.1:8080
,就像访问 123.7.8.9:8090 一样。
-L <local ip>:<local port>:<remote ip>:<remote port> <server addr>
用于建立一个 ssh 隧道,在本机监听 <local ip>:<local port> 这个地址。如果有客户端建立 tcp 连接,那么就像在 <server addr> 这台机器上,创建了一个连接到 <remote ip>:<remote port> 上一样。
反向隧道
Bob 家里面有两台机器,192.168.0.1 和 192.168.0.100 。
Bob 买了一台虚拟主机,互联网 IP 123.4.5.6 。
他在公司里,想登陆家里的服务器 192.168.0.100 。那么他上班前,在 192.168.0.1 上运行命令
ssh -R123.4.5.6:60022:192.168.0.100:22 192.168.0.1
这样就在 123.4.5.6. 上建立了一个反向隧道。
Bob 在公司里面,就可以
ssh -p 60022 123.4.5.6
登陆家里的 192.168.0.100 ,就像从 192.168.0.1 上登陆一样。