SSH Tunnel (port forwarding) 的一些應用(轉帖)

tingsheng發表於2010-12-01

SSH Tunnel (port forwarding) 的一些應用

ssh(secure shell)是一種對資料進行加密安全傳輸的協議。利用ssh工具可以非常方便的登入遠端提供有ssh服務的主機,也可以很方便的進行檔案傳輸。利用 ssh tunnel 可以進行埠轉發(port forwarding), 它在ssh連線上建立一個加密的通道。建立了ssh tunnel之後,可以突破一些網路的限制訪問不能直接訪問的資源。

ssh tunnel分為三種,本地(L),遠端(R)和動態(D)。下面以一些簡單的例項進行說明。假設本地的IP為l1.l2.l3.l4,遠端有一臺ssh主機的ip為r1.r2.r3.r4。

本地埠對映(L)

可能的用途:本地的機器不能訪問一個網站比如www.twitter.com,但是遠端的機器可以訪問。你可以從本地機器連線到遠端的這臺機器。現在希望在本地可以訪問www.twitter.com。

在遠端主機上(或者登入過去)執行命令

ssh -NfL r1.r2.r3.r4:8086:www.twitter.com:80 r1.r2.r3.r4

將twitter.com的web服務埠80對映到遠端這臺機器上。

然後在本地機器訪問

http://r1.r2.r3.r4:8086

就能實現對twitter.com的訪問。

如果在遠端主機上執行的是如下命令

ssh -NfL 8086:www.twitter.com:80 r1.r2.r3.r4

則不能在本地訪問遠端主機的8086埠。這時只能在遠端主機上訪問http://localhost:8086。沒有實際意義。

遠端埠對映(R)

可能的用途:你回到了家或者在外要ssh連線學校或者公司的ssh主機,但是由於閘道器等原因不允許你這樣做。不過你可以實現從學校或公司到處在外網上的家裡或者其它一臺伺服器的連線。

在學校或者公司的本地主機上執行

ssh -NfR 8086:localhost:22 r1.r2.r3.r4

將本地的ssh服務埠對映到遠端機器的8086埠。

回家了或者在外時先登入到遠端的那臺機器上,用命令

ssh -p 8086 localhost

即可實現對公司或者學校內網機器的ssh連線。

動態埠對映(D)

可能的用途:因為防火牆等因素本地機器不能訪問某些資源,但是遠端ssh主機可以訪問。你可以從本地ssh到遠端那臺主機。這時你希望用遠端主機做代理以方便本地的網路訪問,因為最先介紹的本地埠對映只能對指明的個別網站進行訪問。

在本地執行命令

ssh -NfD 8086 r1.r2.r3.r4

這樣就建立了一臺Socket代理機器,接著在瀏覽器上設定Socket代理:地址是localhost,埠是8086。從此以後,你的訪問都是加密的了,而且走的是遠端主機,IP變為了遠端主機的IP,一些不能直接訪問的資源通過這個代理可以訪問。

這種代理稱為ssh tunnel proxy。為了更方便的使用ssh tunnel proxy,需要讓ssh登入免密碼,ssh自動登入,瀏覽器按照規則自動選擇代理。這些在以前的文章Linux下簡單的ssh代理與穿牆中有詳細說明。如果沒有可用的ssh帳號,可以在cjb.net申請。

關於埠的一些說明
  • 1-1023埠只有root才能開啟。大於1023的閒置埠可以使用。
  • 可以用命令

    lsof  -i:8086

    檢視具體埠8086的使用狀況。

SFTP與SSH

SFTP(SSH File Transfer Protocol)從字面上看就是基於ssh的ftp檔案傳輸協議。比一般的ftp傳輸協議安全性更高。因為它基於ssh,所以提供了sftp的伺服器都 有ssh服務可用,即使ssh互動介面被禁。用ssh tunnel proxy 進行socket代理時,我們其實根本就不需要互動介面。所以同樣可以用sftp伺服器實現代理。方法同Linux下簡單的ssh代理與穿牆這篇文章中一樣,使用ssh無互動登入就行。

一般的C-panel空間都至少有sftp服務。在控制皮膚裡找到sftp服務的埠就是ssh服務的埠了。然後就可以實現ssh tunnel proxy了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7734298/viewspace-680712/,如需轉載,請註明出處,否則將追究法律責任。

相關文章