我想寫一個非常簡單的bash腳本,所以我可以先ssh到代理服務器,然後從代理服務器,ssh到目標服務器。這就是網絡的設置方式。我有:自動化通過代理服務器的SSH連接
#! /bin/bash
ssh proxyservername
ssh destservername
哪個行不通。當我連接到proxyserver時,第二行ssh沒有執行,我仍然需要手動輸入命令。是否有一些命令可以添加到腳本中,以便我可以自動連接到目標服務器? (我可以提示輸入密碼。)
我想寫一個非常簡單的bash腳本,所以我可以先ssh到代理服務器,然後從代理服務器,ssh到目標服務器。這就是網絡的設置方式。我有:自動化通過代理服務器的SSH連接
#! /bin/bash
ssh proxyservername
ssh destservername
哪個行不通。當我連接到proxyserver時,第二行ssh沒有執行,我仍然需要手動輸入命令。是否有一些命令可以添加到腳本中,以便我可以自動連接到目標服務器? (我可以提示輸入密碼。)
我認爲在類似的情況下最常見的解決方案是使用-R
標誌ssh
(檢查man ssh
)。您可能還想了解-f
和-o ExitOnForwardFailure=yes
。
我使用的模式是這樣的:
ssh -f -o ExitOnForwardFailure=yes -R localhost:2222:$TARGETNAME:22 $PROXYNAME sleep 1 &&
ssh -p 2222 localhost
(其中2222
基本上你可以在本地計算機上使用任何端口)。
的-R
標誌告訴ssh
從那裏連接到$PROXYNAME
,建立一個隧道的$TARGETNAME
端口22
其另一端連接到端口2222
你的本地計算機上。其他選項會告訴ssh
轉到後臺並在不再使用時關閉此連接。然後,您只需啓動另一個ssh
實例,該實例連接到localhost
上的端口2222
。
我認爲你需要沿着ssh proxyservername 'ssh destservername'
的方向,假設proxyservername
已經安裝了對sshservername的訪問權限。