
我想用來.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
,它就會使密碼在輸出中可見。更好地使用透過環境傳遞密碼,或從檔案中讀取它。ps
ssh
sshpass
sshpass -e
sshpass -f file