ssh端口轉發筆記:ssh反向代理(隧道)、動態代理、本地代理
ssh端口轉發筆記:ssh反向代理(隧道)、動態代理、本地代理
縮略詞
本機:ssh命令發起方,即運行ssh命令的那台機器。也可簡稱客戶端
遠程機:ssh命令連接到的服務器,一般指運行ssh服務的那台機器。也可簡稱服務端
本地機群:能直接與本機通迅的主機集合,包含本機自身。
遠程機群: 能直接與遠程機通迅的主機集合,包含遠程自身。
動態代理
動態代理一般用於代理服務器,應用場景為:本地機群不能直接訪問某些地址/端口,但遠程機可以。本機通過建立一個指定本機端口,遠程機端口不指定(動態)的連接,讓本地機群可以通過該連接去訪問那些地址(基於socks4和socks5協議)。
ssh -o ServerAliveInterval=20 -g -Nf -D 6060 proxy@47.44.161.114 #動態代理
參數 | 說明 |
---|---|
-o ServerAliveInterval=20 | 代表心跳包,ssh在一段時間沒數據后會把連接給斷開。 |
-g | 允許其他主機連接到本機端口進行轉發。 如果無效,要設置本機**sshd_config文件:**gatewayports yes |
-N | 不執行遠程命令。 僅做端口轉發(僅適用於協議版本2)。 |
-f | 將ssh切換到后台 |
-D 6060 | 指定以本機哪個端口做為轉發端口 |
proxy@47.44.161.114 | 以指定帳號連接遠程機 |
反向代理
反向代理一般用於內網穿透,應用場景為:本機在防火牆內,並且防火牆未向外開放本機(或本地網絡內其他主機)端口,遠程機有向外開放的可用端口,本機通過建立一個指定本機(或本地網絡內其他主機)端口和遠程機端口的連接(也可以理解成端口映射),讓外部應用可以通過遠程機端口訪問本機(或本地網絡內其他主機)端口。
ssh -o ServerAliveInterval=20 -g -Nf -R 5001:localhost:6060 proxy@47.44.161.114 #反向代理
參數 | 說明 |
---|---|
-o ServerAliveInterval=20 | 代表心跳包,ssh在一段時間沒數據后會把連接給斷開。 |
-g | 允許其遠程機群連接到遠程機端口進行轉發。 如果無效,要修改遠程機**sshd_config文件:**gatewayports yes |
-N | 不執行遠程命令。 僅做端口轉發(僅適用於協議版本2)。 |
-f | 將ssh切換到后台 |
-R 15001:localhost:6060 | 反向轉發,用值用:分隔為三項,格式為: <遠程機端口>:<本地機群>:<端口>。 |
proxy@47.44.161.114 | 以指定帳號連接遠程機 |
本地代理
本地代理應用場景一般是兩類:一類是應用限制只能訪問本機端口,而實際需要訪問遠程機端口;一類是某個網絡環境只能允許一台主機訪問遠程機端口,而實際是網絡區域內多台主機都有這個要求。
ssh -o ServerAliveInterval=20 -g -Nf -L 5001:localhost:6060 proxy@47.44.161.114
參數 | 說明 |
---|---|
-o ServerAliveInterval=20 | 代表心跳包,ssh在一段時間沒數據后會把連接給斷開。 |
-g | 允許本地機群連接到本機端口進行轉發。 如果無效,要修改本機**sshd_config文件:**gatewayports yes |
-N | 不執行遠程命令。 僅做端口轉發(僅適用於協議版本2)。 |
-f | 將ssh切換到后台 |
-L 15001:localhost:6060 | 本地轉發,用值用:分隔為三項,格式為: <本機端口>:<遠程機群>:<端口>。 示例里第二項localhost,代表的是遠程機,用這種寫法一般代表遠程主機也只能本機訪問該端口 |
proxy@47.44.161.114 | 以指定帳號連接遠程機 |
連接檢測腳本
ssh建立的連接有時候會因為網絡原因斷開,所以寫了個定時任務腳本(基於centos)
#!/bin/sh ### reconnectproxy.sh ### cd ~ pid=` ps aux|grep ssh|grep -E "6060[[:space:]]+proxy@47.44.161.114"|awk '{print $2}'` dt=`date` if [ -n "$pid" ] then echo ${dt}" INFO:proxy is connected">>~/chkconn.log else echo ${dt}" WARN:proxy is not connected">>~/chkconn.log echo ${dt}" WARN:try to reconnect proxy ">>~/chkconn.log ssh -o ServerAliveInterval=20 -g -Nf -D 6060 proxy@47.44.161.114 fi
再用crontab -e命令將腳本加入任務計划中
1 */5 * * * * sh /root/reconnectproxy.sh
參考資料
[1].實戰 SSH 端口轉發