SSH代理


參考:

http://www.dkys.org/archives/1111.html

 

SSH的-L與-D代理

SSH有三種代理參數-L,-D,-R。-R代理不是本次重點,有興趣的讀者可以自行查閱man手冊。

-L參數會在本地監聽一個端口,轉發數據到遠程主機上。
ssh -NL 3306:localhost:3306 user@remote_ip
在本地監聽一個3306端口,轉發到遠程主機上的localhost:3306上,等於訪問本地的3306端口就相當於訪問到了遠程的mysql服務。這種方式訪問遠程服務會更安全,遠程服務不需要對外網暴露端口。
很明顯,這個代理只適用於代理單一ip單一服務的需求有用,本質上是反向代理,客戶端不需要額外配置。

-D參數就厲害了,在本地開放一個socks5協議的代理端口,利用這個端口可以動態的訪問到遠程內網的環境。
ssh -ND 1080 user@remote_ip
這條命令會在本地開放一個1080的socks5端口,支持socks5協議代理的應用程序就可以利用這個端口直接訪問到內網資源。比如:

curl --socks5 127.0.0.1:1080 localhost
讓curl命令利用socks5協議代理訪問到遠程服務器上的http服務,瀏覽器直接配置這個代理服務就可以無阻礙的訪問到內網中所有的http服務了。
很明顯,這個代理本質上是正向代理,可以實現一個代理訪問更多服務資源的需求。但是需要客戶端本身支持代理

 

sshuttle

一個神器。回到我們之前hadoop集群(比如zookeeper集群、kafka集群等)的例子,這些集群沒法通過單一的端口轉發代理實現集群的訪問,VPN有些太重,而且現在非常容易被ban。此時sshuttle進入我的視野,ubuntu下直接用sudo apt install -y sshuttle就可以安裝了。這個工具非常巧妙,利用iptables的端口轉發功能,直接把指定目標網絡的請求通過ssh代理到遠程,實現了非常類似於VPN的功能,但是幾乎零配置,開箱即用,非常方便。不過只支持linux環境的系統(如Linux, FreeBSD, MacOS等等)。

讓我們先看一個簡單的例子:

sshuttle -r user@remote_ip 10.0.0.0/8
代表將10.0.0.0/8這個網段的請求走SSH代理,是不是很容易使用?此外,還支持--dns,--auto-hosts, --auto-nets等十分有用的參數,根據實際情況去選用即可。

sshuttle實際體驗上非常類似於VPN,但是比VPN更輕量,而且無需管理。值得注意的是,本質上這個工具是利用了端口轉發的原理,並不是真正的VPN,所以對於ICMP這類的協議是沒用的,也就是說,對於ping命令是無效的。

 

公司例子: jumpserver轉發

[program:p1]
directory=/usr/bin/
command=/usr/bin/sshuttle -l 127.0.0.1:12300 -r oride-ops 10.52.0.0/16 -vv  #將10.52.0.0/16這個網段的請求用本地端口12300走ssh代理
autostart=true
autorestart=true
startsecs=5
#stderr_logfile=/opt/super_p1_stderr.log
#stdout_logfile=/opt/super_p1_stdout.log
user=root
redirect_stderr=true
stdout_logfile_backups=1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM