一些同仁一直不能理解ssh tunnel是干嘛的,其實很簡單,tunnel就是隧道,下面我們來看一個SSH Tunnel的簡單使用例子.
背景介紹:目前,線上有好幾個數據中心,不同數據中心之間的速度差異還是比較大的,我們一般選擇一個最優的數據中心作為VPN的接入點.
但有些時候直接通過VPN訪問其它數據中心的服務會很慢,于是就臨時通過SSH Tunnel來解決.
應用場景:直接訪問服務器idc1-server1很快,但是直接訪問idc2-server2很慢,而idc1-server1到idc2-server2卻很快.
于是,我們打算用idc1-server1服務器作為跳板來連接idc2-server2.
ssh -i /path/to/sshkey -l username -f -N -T -L 8088:idc2-server2:80 idc1-server1
通過瀏覽器直接訪問http://localhost:8088就相當于訪問了http://idc2-server2
關鍵參數介紹:
-L 8088:idc2-server2:80
將本地的某個端口轉發到遠端指定機器的指定端口,工作原理是:本地機器上分配了一個socket偵聽port端口,一旦這個端口上有了連接,該連接就經過安全隧道(idc1-server1)轉發出去,即.
- localhost:8088 -> (idc1-server1) -> idc2-server2:80;
- ssh -i /path/to/sshkey -l username -f -N -T -L 2022:idc2-server2:22 idc1-server1
通過scp可以將文件通過idc1-server1中轉后傳送到idc2-server2中:
- scp -i /path/to/sshkey -P 2022 upload_file_name.tgz dong@localhost:/path/to/upload/
假設位于公網的客戶端是10.66.0.78(當然事實上這是一個私網IP),公司有一個暴露在公網的主機,公網IP是10.66.0.190(當然事實上這還是一個私網IP),公司私網的IP是192.168.200.20.
我在公司真正要登錄的主機是192.168.200.100,那么我可以做如下操作.
方法1:在 10.66.0.190上執行:
- [root@dhcp-0-190 ~]# ssh -Nf -L 10.66.0.190:10000:localhost:22 192.168.200.100 --Vevb.com
方法2:a. 在10.66.0.190上修改配置文件/etc/ssh/sshd_config
開啟:GatewayPorts yes,然后重新載入sshd配置:
- [root@dhcp-0-190 ~]# service sshd reload
- Reloading sshd:[ OK ]
b. 然后在192.168.200.100上執行
- [root@localhost ~]# ssh -Nf -R 10.66.0.190:10000:192.168.200.100:22 192.168.200.20
然后我們就可以在公網通過訪問10.66.0.190:10000端口來連接192.168.200.100的22端口了.
安全因素:大家看我上面其中2條命令.
- # ssh -Nf -L 10000:localhost:80 209.132.177.100
- # ssh -Nf -L 10.66.0.190:10000:localhost:22 192.168.200.100
再看下ssh tunnel用例:
- -L [bind_address:]port:host:hostport
- bind_address默認是127.0.0.1
格式是:[要打開的監聽IP:]要打開的監聽端口:要映射到的監聽IP:要隱射到的監聽端口.
為什么有時候用locahost,有時候用10.66.0.190?如果說ssh tunnel打開的端口只需要給本機用到,那么就讓端口只在回環接口監聽,如果需要讓別的機器共享ssh tunnel打開的端口,則需要讓ssh在可訪問的IP上打開端口了.
總之處處小心,設好安全權限,防止入侵.
Ssh tunnel通常能實現3種功能:
1) 加密網絡傳輸
2) 繞過防火墻
3) 讓位于廣域網的機器連接到局域網內的機器
新聞熱點
疑難解答