接前文
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選項