【資料整理】ssh端口轉發
【端口轉發】
http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
-C 是進行資料壓縮,
-f 是背景操作,隻有當提示使用者名密碼的時候才轉向前台。
-N 是不執行遠端指令,在隻是端口轉發時這條指令很有用處。
-g 是允許遠端主機連接配接本地轉發端口。
在主流 SSH 實作中,本地端口轉發綁定的是 lookback 接口,這意味着隻有 localhost 或者 127.0.0.1 才能使用本機的端口轉發 , 其他機器發起的連接配接隻會得到“ connection refused. ”。好在 SSH 同時提供了 GatewayPorts 關鍵字,我們可以通過指定它與其他機器共享這個本地端口轉發。
ssh -g -L <local port>:<remote host>:<remote port> <SSH hostname>
-R 是将遠端主機端口映射到本地端口。
-L 是将本地端口映射到遠端主機端口。
-D 是動态轉發,其實在這裡 SSH 是建立了一個 SOCKS 代理服務。
ssh -D <local port> <SSH Server>
server
A: IP:192.168.2.10,PORT:500,SSH端口:322
client
B: IP:192.168.2.20,PORT:7000
在A上生成ssh key,passphrase為空。
$ ssh-copy-id [email protected]
在B上生成ssh key,passphrase為空。
$ ssh-copy-id [email protected]
SSH 端口轉發自然需要 SSH 連接配接,而 SSH 連接配接是有方向的,從 SSH Client 到 SSH Server 。而我們的應用也是有方向的,比如需要連接配接 LDAP Server 時,LDAP Server 自然就是 Server 端,我們應用連接配接的方向也是從應用的 Client 端連接配接到應用的 Server 端。如果這兩個連接配接的方向一緻,那我們就說它是本地轉發。而如果兩個方向不一緻,我們就說它是遠端轉發。
1)如果這兩個連接配接的方向一緻,那我們就說它是本地轉發
ssh -L <local-port>:<remote-host>:<remote-port>
本地轉發在本地這台機器上監聽一個端口,然後所有通路這個端口的資料都會通過ssh 隧道傳輸到遠端的對應端口上
在B上執行:
ssh -p 322 -N -f -L 7000:127.0.0.1:500 [email protected]
主機B上的應用發送資料到本地7000端口->
主機B上的SSH Client将7000端口收到的資料加密并轉發到主機A上的SSH Server(192.168.2.10)上->
主機A上的SSH Server解密資料并轉發到本地的500端口
2)而如果兩個方向不一緻,我們就說它是遠端轉發。(反向連接配接)
ssh -R listen-port:host:port
遠端轉發與本地轉發正好相反,打開ssh隧道以後,在遠端伺服器監聽一個端口,所有通路遠端伺服器指定端口都會通過隧道傳輸到本地的對應端口上
在A上執行:
ssh -p 322 -N -f -R 7000:127.0.0.1:500 [email protected]
主機B上的SSH Server将7000端口收到的資料加密并轉發到主機A上的SSH Client(192.168.2.10)上->
主機A上的SSH Client解密資料并轉發到本地的500端口
例如:
ssh -NfR 10065:127.0.0.1:10050 [email protected]
主機B上的zabbix server發到本地10065端口請求zabbix資料->
主機B上的SSH Server将10065端口收到的資料加密并轉發到主機A上的SSH Client(192.168.2.10)上
主機A上的SSH Client解密資料并轉發到本地的10050端口
3)多主機轉發
APP Client(A) ->(非加密)-> SSH Client(C) ->(加密)-> SSH Server(D) ->(非加密)-> APP Server(B)
在C上面執行:
ssh -g -L 7000:<B>:500 <D>
在A上面通路C的7000端口即可