ssh強大的端口轉發功能

ssh 最普通的用法即是經過 ssh 遠程登陸 linux 服務器,或是遠程執行命令,可是,ssh 的用法不光侷限於此,它的端口轉發功能纔是高級的用法。
ssh的遠程登陸以及遠程執行命令就不記錄了,主要記錄一下 ssh 在不一樣地方的端口轉發。html

這是ssh的參數解釋
相關參數的解釋: linux

-f Fork into background after authentication.
後臺認證用戶/密碼,一般和-N連用,不用登陸到遠程主機。nginx

-L port:host:hostport
將本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口. 工做原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了鏈接, 該鏈接就通過安全通道轉發出去, 同時遠程主機和 host 的 hostport 端口創建鏈接. 能夠在配置文件中指定端口的轉發. 只有 root 才能轉發特權端口. IPv6 地址用另外一種格式說明: port/host/hostport
-R port:host:hostport
將遠程主機(服務器)的某個端口轉發到本地端指定機器的指定端口. 工做原理是這樣的, 遠程主機上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了鏈接, 該鏈接就通過安全通道轉向出去, 同時本地主機和 host 的 hostport 端口創建鏈接. 能夠在配置文件中指定端口的轉發. 只有用 root 登陸遠程主機才能轉發特權端口. IPv6 地址用另外一種格式說明: port/host/hostportshell

-D port
指定一個本地機器 「動態的’’ 應用程序端口轉發. 工做原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了鏈接, 該鏈接就通過安全通道轉發出去, 根據應用程序的協議能夠判斷出遠程主機將和哪裏鏈接. 安全

-C Enable compression.
壓縮數據傳輸。服務器

-N Do not execute a shell or command.
不執行腳本或命令,一般與-f連用。ssh

-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D參數中,容許遠程主機鏈接到創建的轉發的端口,若是不加這個參數,只容許本地主機創建鏈接。注:這個參數我在實踐中彷佛始終不起做用。socket

以上摘錄: http://blog.creke.net/722.htmlide

服務器.net

遠端A主機 ip: 111.21.21.2 ; 遠端B主機 ip: 172.16.3.22
本地A主機 ip: 192.168.1.2 ; 本地B主機 ip: 192.168.1.5
能夠理解爲,遠端主機A.B是一個局域網內的服務器,本地主機A.B 是本身當前所在的服務器;咱們能夠直接登陸本地主機A或者B。可是,本地主機和遠端主機之間,只有本地的 A 主機和遠端的 A 主機能夠互相直接通訊。由此,對應不一樣的場景,咱們便須要作端口轉發來知足跨網段訪問,能夠理解爲作端口轉發的那臺機器至關因而代理服務器。

示例1

從遠端A主機作 ssh 隧道,將遠端B主機的 3306 端口轉發到本地的 A 主機上的 13306 端口上過,而後用 本地的 B 主機經過 本地A主機的 13306 登陸 遠端B主機的 3306 端口

ssh -Nf -R 13306:172.16.3.22:3306 root@192.168.1.2 -o ServerAliveInterval=60

添加說明: 此方法,是在遠端A主機執行此命令,將 13306 端口轉發到了本地A主機上,能夠在本地A主機上看到有 13306 端口,。當從 本地B主機 請求 本地A主機的 13306 端口時,本地A主機 將會直接經過 22 端口轉發到 遠端A主機的 22 端口,而後 遠端A主機再去經過 22 端口請求遠端 B 主機 的 3306端口,由此實現跨網段訪問。這種方法最直觀的展示給咱們的是,經過 本地B主機 登陸 本地A主機 的 13306 會直接登陸到 遠端B主機的 3306 端口上。
使用場景: 此方法使用於本地想要直接鏈接遠端局域網內其餘服務器的各類端口。
缺點:此方法有個蛋疼的地方,轉發過來的端口不能對外,只能本機訪問,想要再其餘機器訪問的話,本機裝一個nginx,將本機的 127.0.0.0:13306 端口代理出去便可。

示例2

本地A主機分配socket,端口轉發到遠端A主機,本地B主機經過本地A主機開的端口去訪問遠端A主機,遠端A主機判斷出來自本地A主機的請求類型去訪問請求對應的資源返回給本地A主機,而後本地A主機再將請求內容返回給本地B主機,能夠看作本地A主機是本地代理服務器,遠端A主機是遠端代理服務器。

ssh -C -fNg -D 65122 test@111.21.21.2 -p 22 -o ServerAliveInterval=60
應用場景:此種方式適合作×××代理服務器
相關文章
相關標籤/搜索