使用方法
ssh -NL 30080:host_by_remote_host:80 -p 22 sddt@remote_host
上面的命令只能使用 localhost
或 127.0.0.1
访问端口,如果要共享给局域网的用户,应该这样写:
ssh -NL local_ip:30080:host_by_remote_host:80 -p 22 sddt@remote_host
原理
假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。
我们在host1执行下面的命令:
ssh -L 2121:host2:21 host3
命令中的L参数一共接受三个值,分别是”本地端口:目标主机:目标主机端口”,它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。
这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口。
ftp localhost:2121
“本地端口转发”使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为”SSH隧道”。
下面是一个比较有趣的例子。
ssh -NL 30080:localhost:80 -p 6001 sddt@47.102.159.103
它表示将本机的5900端口绑定host3的5900端口(这里的localhost指的是host3,因为目标主机是相对host3而言的)。
另一个例子是通过host3的端口转发,ssh登录host2。
ssh -L 9001:host2:22 host3
这时,只要ssh登录本机的9001端口,就相当于登录host2了。
ssh -p 9001 localhost
上面的-p参数表示指定登录端口。