1. 程式人生 > >SSH Tunnel掃盲(ssh port forwarding埠轉發)

SSH Tunnel掃盲(ssh port forwarding埠轉發)

SSH的的Port Forward,中文可以稱為埠轉發,是SSH的一項非常重要的功能。它可以建立一條安全的SSH通道,並把任意的TCP連線放到這條通道中。下面仔細就仔細討論SSH的這種非常有用的功能。

SSH Tunnel有三種,分別是本地Local(ssh -NfL),遠端Remote(ssh -NfR),動態Dynamic(ssh -NfD)。(含義參考man ssh


說明:在我們舉例說明用法之前,先假設你有一臺SSH機器,它的IP是a.b.c.d。

1:本地Local(ssh -NfL)
ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
ssh -NfL a.b.c.d:1234:www.google.com:80a.b.c.d

此時,在瀏覽器裡鍵入:http://a.b.c.d:1234,就會看到Google的頁面了。

在繫結1234埠的時候,可以省略前面的ip,如此一來,1234埠就僅僅繫結在localhost地址上,更安全:

ssh -NfL 1234:www.google.com:80a.b.c.d

此時瀏覽的話就要在a.b.c.d機器上使用http://localhost:1234了。

何時使用本地Tunnel?

比如說你在本地訪問不了某個網路服務(如www.google.com),而有一臺機器(如:a.b.c.d)可以,那麼你就可以通過這臺機器來訪問。


2:遠端Remote(ssh -NfR)
ssh -R <local port>:<remote host>:<remote port> <SSH hostname>
在需要被訪問的內網機器上執行: ssh -NfR 1234:localhost:22a.b.c.d

登入到a.b.c.d機器,使用如下命令連線內網機器:

ssh -p 1234localhost

需要注意的是上下兩個命令裡的localhost不是同一臺。這時你會發現自己已經連上最開始命令裡的localhost機器了,也就是執行“ssh -NfR”的那臺機器。

何時使用遠端Tunnel?

比如當你下班回家後就訪問不了公司內網的機器了,遇到這種情況可以事先在公司內網的機器上執行遠端Tunnel,連上一臺公司外網的機器,等你下班回家後 就可以通過公司外網的機器去訪問公司內網的機器了。

3:動態Dynamic(ssh -NfD)-Socket代理
ssh -D  
ssh -NfD 1234a.b.c.d

a.b.c.c 是server 地址

如此一來就建立了一臺Socket代理機器,接著在瀏覽器上設定Socket代理:地址是localhost,埠是1234,從此以後,你的訪問都是加 密的了!你可以通過訪問WhatIsMyIP來 確認自己現在的IP,看看是不是已經變成a.b.c.d了。

測試階段,也可以把埠繫結在外網地址上,如此一來,你在瀏覽器上就可以使用外網地址設定Socket代理,但這僅限於測試,否則,你的機器就不安全了, 隨時可能成為肉雞。對於Windows使用者來說,如果討厭命令列,還可以使用MyEnTunnel來實現同樣的功能,配合Firefox的 FoxyPorxy,基本就無敵了,至於具體的配置方法,小崔已經寫好了:使用Firefox+foxyProxy+SSH翻山越嶺。如果你使用的是Chrome的話,則可以選擇 Proxy Switchy!來實現同樣的效果,恕不多言。