使用 sshpass 進行多跳

使用 sshpass 進行多跳

我想用來.ssh/config透過網關連接到主機。我不想設定 RSA 金鑰而必須使用密碼。我以前做過這種沒有密碼的跳躍。現在嘗試用密碼來做到這一點。

對我有用的直接命令是:

sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" myusername@myip

我已經在網關中設定了金鑰身份驗證,其詳細資訊位於我的 .ssh/config 中。為了在 中進行設置.ssh/config,我嘗試了以下操作:

Host h_act
      <username, hostname, port etc.>
      ProxyCommand ssh gateway -W %h:%p
Host h
      ProxyCommand sshpass -p mypassword ssh h_act

然而,當我嘗試時ssh h,我得到了Pseudo-terminal will not be allocated as stdin is not a terminal。我嘗試-vtt使用 ssh 來獲取奇怪的訊息,但沒有終端。我知道當有一個 ProxyCommand 鍊netcat/nc或只有一個ProxyCommand 鏈時ssh -W,它就會起作用。但在這裡,它不起作用。即使當我在沒有 sshpass 的情況下嘗試最後一個命令時,我也會收到相同的錯誤。我猜測這與 ProxyCommand 對後續命令的某些期望有關,但我無法實現它們。

有任何想法嗎?

答案1

我不認為你的配置與那一行相同,它看起來更像是這樣的:

ssh -o ProxyCommand='sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" h_act' myusername@myip 

即您sshpass在 ProxyCommand 內運作。

但我認為這不會起作用,將客戶端sshpass包裝ssh在偽終端中,隱藏密碼實際上來自文件或除終端用戶輸入之外的其他內容的事實。為此,它需要在ssh客戶端運行之前運行。

如果您的第一個單行程式碼有效,但您只是不想sshpass每次都輸入,則可以將其包裝在 shell 腳本中:

#/bin/sh
sshpass -f passwordfile ssh -o ProxyCommand="ssh gateway -W %h:%p" "$@"

然後運行類似的東西sshscript myusername@myip

順便說一句,不要使用,只要客戶端(和)運行sshpass -p,它就會使密碼在輸出中可見。更好地使用透過環境傳遞密碼,或從檔案中讀取它。pssshsshpasssshpass -esshpass -f file

相關內容