ssh反向代理+正向代理


用一台能夠公網訪問的host作為跳板機,轉發不同端口到內網目標機的ssh端口,進而實現ssh遠程登錄。

配置中將會用到的SSH參數:

反向代理 ssh -fCNR

正向代理 ssh -fCNL

-g:允許遠程主機連接主機(host)的轉發端口;

-f 后台執行ssh指令

-C 允許壓縮數據

-N 不執行遠程指令

-R 將遠程主機(服務器)的某個端口轉發到本地主機指定的端口

-L 將本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口

-p 指定遠程主機的端口

准備工作

開啟ssh的轉發功能,以ubuntu server12.04為例,服務器默認是安裝了openssh-server的,在/etc/ssh/sshd_config末尾追加一下命令:

GatewayPorts yes


重啟ssh

service ssh restart

 

正向代理

正向代理的典型例子是主機(A)通過一台可以訪問的主機(B)訪問主機(C)提供的服務。 主機A不能直接訪問主機C提供的服務,但是主機A可以訪問主機B,主機B可以訪問到主機C的服務,那我們可以在主機A上使用以下命令

ssh -CNfL a_port:c_ip:c_port b_user@b_ip


其中CNf都不是必須參數,C是對數據進行壓縮,N代表不執行遠程命令(盡量帶上),f代表后台執行。
主機A可以通過訪問自己的a_port端口來訪問主機C的c_port端口,例如主機A要通過自己的6666端口訪問主機C的80端口,則需要執行一下命令

ssh -CNfL 6666:c_ip:80 b_user@b_ip

 


我們可以將問題簡化一些,假設主機B的某個端口不對外提供服務,只能夠主機B自己訪問,那么上述命令中的主機C和主機B將是一樣的,命令將變為

ssh -CNfL a_port:b_ip:b_port b_user@b_ip
ssh -CNfL a_port:localhost:b_port b_user@b_ip


以上兩條命令是等價的,因為在第一個端口(a_port)后面的地址(b_ip)與端口(b_port)是相對於命令最末端的主機(b_ip)來說的,如果主機A是要用主機B來代理主機B的某項服務,那么第一個端口后寫的主機地址為主機B的ip或者是localhost(127.0.0.1)是沒有區別的。

可以看到正向代理是給自己代理提供服務的。

反向代理

反向代理與正向代理的原理產不多,都是用過ssh進行數據的傳輸,只是使用場景不同.反向代理的作用可以認為是把內網中的主機(A)暴露出來,以便於所有的主機都可以訪問到主機A的服務

假定我們使用一台公網可以訪問的主機(B)來給主機A做反向代理,那么命令如下

ssh -CNfR b_port:127.0.0.1:a_port b_user@b_ip


CNf與正向代理相同,也不是必須的,在主機A上使用以上命令,即可以把主機B的b_port端口映射到主機A的a_port端口。

舉個簡單的例子,主機A處於內網中,公網不能訪問,在主機A上有一個http服務器,現在想讓異地的朋友能夠看到這個服務器上的內容,那我們就可以使用一下命令:

ssh -CNfR b_port:127.0.0.1:80 b_user@b_ip


b_port自己定義,不要沖突就行,之后我們通過b_ip:b_port就可以訪問到主機A的http服務了。

總結一下就是反向代理是給其他用戶代理提供服務的。

喜歡這篇文章?歡迎打賞~~

 


免責聲明!

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



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