使用ssh tunnel 來做代理或跳板


接前文

http://www.cnblogs.com/piperck/p/6188984.html  使用ssh config配置文件來管理ssh連接

前文說了如何配置自己的ssh config 來方便的管理自己的ssh連接,以及如何使用ssh-add來將自己密鑰密碼存儲起來。接下將討論一下使用ssh來做轉發和跳板的相關實踐。

 

首先還是先說下這么一個情況:

我們的外部防火牆阻止了一些常用端口,現在打開的只有22 80 和443 也就是ssh http以及https服務可用,現在我可以通過和遠程主機建立 tunnel 通過命令將本地的某個端口的流量通過tunnel 轉發到遠程主機的指定端口上。

ssh -L 就是做這個事情的
例如我想將本地的 3306 端口上的流量通過ssh23 端口轉發到目標主機的 9999 端口上可以使用

ssh -L 3306:127.0.0.1:9999 target_host

同時這個命令也可以使用ssh config寫法如下:

Host tokyo-hot
    Host target_host
    LocalForward 9906 127.0.0.1:3306
User: piperck

 

另外一個非常實用的,可以使用ssh來輕松越過牆

使用ssh -D 命令可以直接代理到目標,而且目標將會自動監聽和轉發。支持 socks4 socks5 代理。ssh 可以在此充當一個 socks5 代理服務器。指定一個端口,然后由這個端口作為 socks 代理服務器進行轉發。

ssh -TND 9999 piperck@target_server  即可建立一個簡易的sock5代理服務了。 如果你的機器是在牆外面,那么你將可以使用這條 ssh tunnel 翻牆。

流量會由 9999 端口進行代理轉發。

 

我理解的流量走的順序大概是,應用端口->指定端口代理服務器(9999)->ssh(22)   >>>>>>>>>>>ssh(22)目標主機->代為訪問目標地址->原路返回數據。

 

這樣相當於將外部服務器做了一個跳板,從跳板上訪問另外的目標地址。 如果你喜歡 甚至可以嵌套ssh命令登陸多台機器 類似:

ssh -A -t target_1 ssh -A -T target_2.....

使用這種鏈條一路訪問下去(這里使用-A參數是因為 目標主機存儲的是 本地計算機的公鑰 如果不是存的本地公鑰而是target_1的公鑰可以去掉這個參數)。

另外還有一種方式可以實現這種連續跳轉的。

使用 ssh -o  ProxyCommand="ssh -W %h:%p jumphost.example.org" server.example.org

 

大概解釋一下 ProxyCommand的-W參數 可以指定一個hostname:port參數

這里的 jumphost.xx 是跳板機的地址, 后面的server.xx是要去往的目標地址,同樣ProxyCommand允許使用config配置文件使得他變得更靈活

例如:

Host lab
    HostName xcfapp-crontab
    User piperck
    IdentityFile ~/.ssh/id_rsa
    ProxyCommand ssh -W %h:%p jumphost.example.org

這樣來實現。

ssh 還有非常多的細節可以去探索,暫時我使用到的就是這些,如果以后有更細的功能使用 可能會追加更多的內容。

 

Reference:

http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/  Simplify Your Life With an SSH Config File

http://www.cnblogs.com/-chaos/p/3378564.html  ssh -D -L -R 差異

http://www.cnblogs.com/piperck/p/6188984.html  使用ssh config配置文件來管理ssh連接

https://heipei.github.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/  SSH-Agent-Forwarding-considered-harmful

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts  Proxies_and_Jump_Hosts

https://dslztx.github.io/blog/2017/05/19/ssh%E5%91%BD%E4%BB%A4%E4%B9%8BProxyCommand%E9%80%89%E9%A1%B9/    ssh命令之ProxyCommand選項


免責聲明!

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



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