SSH的端口轉發(port forwarding via SSH),又叫作SSH隧道(SSH tunneling) ,是一種在本地計算機和遠程計算機之間創建一個安全的鏈接,使遠程計算機還能夠做爲中繼服務。SSH爲其餘 TCP連接提供了一個安全的通道來進行傳輸而得名。例如,Telnet,SMTP,LDAP這些 TCP 應用均可以從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。總的來講 SSH端口轉發可以提供兩大功能:shell
1:加密 SSHClient 端至 SSHServer端之間的通信數據。瀏覽器
2:突破防火牆的限制完成一些以前沒法創建的 TCP 鏈接。安全
SSH端口轉發的三種類型:服務器
一、本地端口轉發:由SSH客戶端經由SSH服務器端轉發,鏈接至目標服務器上。ssh
二、遠程端口轉發:由SSH服務器經由SSH客戶端轉發,鏈接至目標服務器上。socket
三、動態端口轉發:從各類應用經由SSH客戶端轉發,通過SSH服務器,到達目標服務器,不固定端口。ide
實驗背景介紹:加密
遠程服務器C拒絕A的鏈接,B服務器拒絕A的不安全連接。spa
目的:經過A到B服務器安全連接,經過B代A訪問服務器C。firefox
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端口爲代理端口。