SSH工具的非常規使用
說明:本文所有的命令是基於OpenSSH客戶端7.4p1版本。如果出現命令不正確,請檢測是否為此OpenSSH版本。
設置動態代理
工作中經常會遇到使用ssh遠程幫客戶調試安裝,但是在調試安裝過程中,有時需要瀏覽器去訪問HTTP服務,這時可以用ssh -D方式在本地啟用一個socks5的代理:
#加上-Nf參數可以將此連接放到后台
ssh -D 2080 root@1.1.1.1 -N -f
連接成功后,再配置瀏覽器使用socks5://127.0.0.1:2080的代理,即可訪問遠程內網的HTTP服務。
SSH隧道連接
將遠程服務器端口映射到本地內網
ssh隧道可以實現將遠程服務器的某個端口,映射到本地PC上。
比如這樣一個場景:公網服務器上有個MySQL數據庫服務,它只監聽127.0.0.1:3306。我有遠程服務器C的ssh訪問權限,而同事B沒有該服務器的ssh權限,但是同事此時需要連接此數據庫,我就可以用下面命令將遠程的3306端口映射到我本地PC的19999端口。
內網同事B: 192.168.0.6 ---> 內網的我A: 192.168.0.5 ---> 公網服務器C: 1.1.1.1
#在內網A機器上執行下面命令
ssh -L 0.0.0.0:19999:127.0.0.1:3389 root@1.1.1.1 -N -f
這樣同事只需要用mysql命令連接192.168.0.5:19999即可。
將本地內網端口映射到遠程服務器
ssh隧道除了上面的將遠程服務器端口映射到本地,還可以將本地內網的端口映射到遠程服務器上。
常用場景:公司內網有個演示產品應用,需要給客戶(B)訪問此服務器(A)的80端口。但是此服務器沒有公網IP,也沒有做端口映射,此服務器只有訪問公網的權限,我們只有一個生產的服務器(C)在公網。
客戶內網B: 192.168.0.6 ---> 公網生產服務器C: 1.1.1.1 ---> 內網服務器C: 192.168.3.100
#在內網服務器C上執行下面命令
ssh -f -N -R 19999:localhost:80 root@1.1.1.1
客戶直接訪問http://1.1.1.1:19999即可
注意:上面公網服務器
1.1.1.1需要開啟sshd_config配置內的一個參數,GatewayPorts yes。如果不開啟此參數,默認創建的監聽地址是127.0.0.1,開啟此參數后監聽地址為0.0.0.0。
使用ssh-agent
ssh-agent可以將本地的私鑰文件保存到ssh會話里面,這樣遠程連到服務器B上,就可以將個人的私鑰文件也帶入過去。
常用場景:一個git倉庫添加了我個人的公鑰證書,我有權限用git的ssh協議去pull和push。但是我臨時需要部署服務器B,而又不想在git倉庫添加此服務器的公鑰。這時即可通過使用ssh-agent轉發本地的私鑰到遠端服務器上。
#啟動ssh-agent
eval $(ssh-agent -s)
#添加本地私鑰文件(若不加私鑰路徑,則使用默認私鑰路徑)
ssh-add ~/.ssh/id_rsa
#驗證是否正確添加key,正確情況會列出你的公鑰信息
ssh-add -L
上面是啟用ssh-agent,下面還需要修改ssh_config配置文件,開啟ForwardAgent yes。
#此處是全局啟用ForwardAgent參數
Host *
User root
ForwardAgent yes
開啟后,ssh root@1.1.1.1遠程連接到遠程服務器,然后用ssh-add -L在遠程服務器上也可以看的你的公鑰信息,這樣再使用ssh協議的git clone就可以正常使用了。當然也可以再用自己的私鑰,通過ssh訪問其他有權限登錄的服務器。
設置跳板機
生產環境中,有許多服務器沒有開啟公網的SSH訪問,只能通過一個跳板機登錄到生產內網,然后再訪問生產服務器。這時候在使用scp進行文件傳輸、以及用ssh登錄等操作很不方便。
方法一、修改ssh_config配置文件
OpenSSH 7.3版本以上的可以用下面配置:
#內網服務器端,也可寫死為單個ip
Host 192.168.0.*
User root
#跳板機用戶為:test,IP地址為:1.1.1.1,端口為:22022
ProxyJump test@1.1.1.1:22022
OpenSSH 7.3版本以下的用下面配置:
#內網服務器端,也可寫死為單個ip
Host 192.168.0.*
User root
#跳板機用戶為:test,IP地址為:1.1.1.1,端口為:22022
ProxyCommand ssh -p 22022 test@1.1.1.1 -W %h:%p
方法二、直接用命令
除了修改配置文件,還可以直接用命令實現,下面先說下7.3版本以上,支持ProxyJump的版本:
#跳板機用戶為:test,IP地址為:1.1.1.1,端口為:22022,內網服務器為192.168.0.100
ssh -J test@1.1.1.1:22022 root@192.168.0.100
7.3以下版本
#跳板機用戶為:test,IP地址為:1.1.1.1,端口為:22022,內網服務器為192.168.0.100
ssh -o ProxyCommand="ssh -p 22022 test@1.1.1.1 -W %h:%p" root@192.168.0.100
提示:以上跳板機配置也同樣適用於基於ssh協議的工具,比如
ansible和git。
