有时,绑定本地端口还不够,还必须指定数据传送的目标主机,从而造成点对点的"端口转发"。为了区别后文的"远程端口转发",咱们把这种状况称为"本地端口转发"(Local forwarding)。ssh
假定host1是本地主机,host2是远程主机。因为种种缘由,这两台主机之间没法连通。可是,另外还有一台host3,能够同时连通前面两台主机。所以,很天然的想法就是,经过host3,将host1连上host2。spa
咱们在host1执行下面的命令:code
$ ssh -L 2121:host2:21 host3
命令中的L参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口2121,而后指定host3将全部的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。blog
这样一来,咱们只要链接host1的2121端口,就等于连上了host2的21端口。class
$ ftp localhost:2121
"本地端口转发"使得host1和host3之间仿佛造成一个数据传输的秘密隧道,所以又被称为"SSH隧道"。登录
下面是一个比较有趣的例子。ftp
$ ssh -L 5900:localhost:5900 host3
它表示将本机的5900端口绑定host3的5900端口(这里的localhost指的是host3,由于目标主机是相对host3而言的)。数据
另外一个例子是经过host3的端口转发,ssh登陆host2。端口
$ ssh -L 9001:host2:22 host3
这时,只要ssh登陆本机的9001端口,就至关于登陆host2了。di
$ ssh -p 9001 localhost
上面的-p参数表示指定登陆端口。