有時,綁定本地端口還不夠,還必須指定數據傳送的目標主機,從而造成點對點的"端口轉發"。爲了區別後文的"遠程端口轉發",咱們把這種狀況稱爲"本地端口轉發"(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參數表示指定登陸端口。