
在我們的 ENV 中,我們有 2 個 Jumphost 伺服器,我們嘗試在遠端伺服器上登入並執行 ssh 命令,在 sshproxy 的幫助下,每個位置都有 ssh/confg 文件,我們進入 Jump2 伺服器。我們想要合併設定文件,以便我們可以同時存取所有位置伺服器。
請參閱下面 ENV
筆記型電腦-------->
Jumphost1 --------->
Jumphost2--------->
遠端伺服器
實際上,我們計劃從本地電腦運行腳本並將輸出儲存在本地。因此,為了歸檔此任務,我們需要 ssh 到 2 個跳轉主機並在遠端伺服器上執行以下命令,這將從本機電腦執行腳本並在本機電腦本身上取得輸出。
Jump1 可透過 2222 連接埠訪問,用戶將是同一用戶
但要訪問遠端伺服器,有一個不同的用戶1
ssh user1@ip < ./script >> file.txt &&
設定你的~/.ssh/config:
主機跳轉1 使用者jump1user 埠2222 主機跳轉2 ProxyCommand ssh -W %h:%p 跳轉1 使用者jump2user 主機RemoveServer ProxyCommand ssh -W %h:%p 跳轉2 使用者remoteUser
透過上面的文件,我們可以直接登入jump2伺服器,沒有任何問題。但我們每次都必須為每個位置更改設定檔。
為了在腳本中運行下面的範例 ssh 命令以從每個區域收集信息,我們需要一個設定檔。
例子
ssh jump2 | ssh user1@remoteserver-ip < ./script >> file.txt &&
答案1
我希望這個例子能讓您只使用一個文件:
Host *
User username
IdentityFile /home/username/.ssh/identity
Host some*
ProxyCommand /usr/bin/ssh -p 2222 username@jumphost /usr/bin/nc %h %p 2> /dev/null
Host other*
ProxyCommand /usr/bin/ssh -p 2222 username@otherjumphost /usr/bin/nc %h %p 2> /dev/null
Host something
HostName 1.2.3.4
Host somethingelse
HostName 2.3.4.5
Host otherthing
HostName 3.4.5.6
答案2
Host remotehost
ProxyCommand /usr/bin/ssh -p 2222 username@jumphost /usr/bin/nc %h %p 2> /dev/null
正如您所描述的,由於跳轉主機只能在連接埠 2222 上訪問,因此您需要將該事實告知代理 SSH 連線。
作為對問題的進一步編輯已澄清,實際上有二您將透過其進行代理的主機,這會變得有點複雜,但也只是稍微複雜一點。鑑於:
local.example.com
- 您直接工作的主機jump1.example.com
- 您直接連接的主機local
jump2.example.com
- 您直接連接的主機jump1
endpoint.example.com
- 您最終要連接的主機
在 上local.example.com
,將以下內容新增至您的 SSH 配置:
host endpoint.example.com
ProxyCommand /usr/bin/ssh -p 2222 [email protected] /usr/bin/nc %h %p 2> /dev/null
在 上jump1.example.com
,將以下內容新增至您的 SSH 配置:
host endpoint.example.com
ProxyCommand /user/bin/ssh -p 2222 [email protected] /usr/bin/nc %h %p 2> /dev/null
現在您可以透過兩個代理進行存取。ssh [email protected]
local.example.com