SSH的端口轉發(port forwarding via SSH),又叫做SSH隧道(SSH tunneling) ,是一種在本地計算機和遠端計算機之間建立一個安全的連接配接,使遠端計算機還可以作為中繼服務。SSH為其他 TCP連結提供了一個安全的通道來進行傳輸而得名。例如,Telnet,SMTP,LDAP這些 TCP 應用均能夠從中得益,避免了使用者名,密碼以及隐私資訊的明文傳輸。總的來說 SSH端口轉發能夠提供兩大功能:
1:加密 SSHClient 端至 SSHServer端之間的通訊資料。
2:突破防火牆的限制完成一些之前無法建立的 TCP 連接配接。
SSH端口轉發的三種類型:
1、本地端口轉發:由SSH用戶端經由SSH伺服器端轉發,連接配接至目标伺服器上。
2、遠端端口轉發:由SSH伺服器經由SSH用戶端轉發,連接配接至目标伺服器上。
3、動态端口轉發:從各種應用經由SSH用戶端轉發,經過SSH伺服器,到達目标伺服器,不固定端口。
實驗背景介紹:

遠端伺服器C拒絕A的連接配接,B伺服器拒絕A的不安全連結。
目的:通過A到B伺服器安全連結,通過B代A通路伺服器C。
1:本地端口轉發
示意圖:
如圖所示,通過在客戶機和伺服器之間建立SSH安全通道,将應用程式的資料通過通道經由伺服器,連接配接到目标伺服器上。在實驗背景介紹中,A相當于用戶端,B相當于伺服器端。
實作過程:
在用戶端操作(A):
ssh -L local_port:remote_address:remote_port remote_sshd_jumpserver
local_port:是指指定一個本地端口,作為連接配接sshd跳闆機的端口
remote_address:指的是要登入的遠端主機位址
remote_port:指的是要登入的遠端主機的端口
remote_sshd_jumpserver:是指開啟了sshd服務的跳闆機(相當于SSH伺服器B)
示例:
ssh –L 9527:telnetsrv:23 -fN sshsrv
-f背景啟用
-N不打開遠端shell,處于等待狀态
-g啟用網關功能,跟本地這台機器在同一個網段的,都可以通過這台機器進行轉發。
telnet 127.0.0.1 9527
通過通路本機的9527的端口時,被加密後轉發到sshsrv的ssh服務,再解密被轉發到telnetsrv:23
2:遠端端口轉發
如圖所示,伺服器經由用戶端,遠端端口轉發與本地端口轉發中,用戶端和伺服器端的角色進行了互相的調換,在實驗背景中,A相當于伺服器端,B相當于用戶端。(注意:這裡的用戶端和伺服器端均是指相對于SSH協定的伺服器端和用戶端。)
在跳闆機上操作(B)
ssh-R sshserverport:remotehost:remotehostport sshserver
sshserverport:是指ssh伺服器是打開的端口,(A機器)
remotehost:指的是要登入的遠端主機位址
remotehostport:指的是要登入的遠端主機的端口
sshserver:是指SSH伺服器端的位址(相當于A機器)
ssh –R 9527:telnetsrv:23 –fN sshsrv
A機器上執行:telnet 127.0.0.1 9527
讓sshsrv偵聽9527端口的通路,如有通路,就加密後通過ssh服務轉發請求到本機ssh用戶端,再由本機解密後轉發telnetsrv:23
3:動态端口轉發
當用firefox通路internet時,本機的1080端口做為代理伺服器,firefox的通路請求被轉發到sshserver上,由sshserver替之通路internet。
在本機firefox設定代理socket proxy:127.0.0.1:1080
在用戶端執行:
ssh -D 1080 root@sshserver
需要在圖形界面的浏覽器中設定服務代理,并指定1080端口為代理端口。