“ssh”有效,但“sshpass”無效——這怎麼可能?
我為 SSH 連接配置了密鑰對。它有效,但當然要求輸入密碼。
ssh user1@10.7.175.143
所以現在我嘗試使用已安裝的 sshpass 登錄。我嘗試了
-p
財產,但也嘗試了財產,但-f
沒有任何效果-它只是掛起。詳細在客戶端提供這些資訊
sshpass -v -p "pass" ssh user1@10.7.175.143 SSHPASS searching for password prompt using match "assword" SSHPASS read: SSHPASS read: Enter passphrase for key '/home/user1/.ssh/id_rsa':
在伺服器端,我可以在日誌中看到這些資訊:
Accepted key RSA SHA256:V/V29pA2Ps5k/lBgz2R5XFP6vaaaOUN5hj0hca+j8TI found at __PROGRAMDATA__/ssh/administrators_authoriz ed_keys:1 debug3: mm_answer_keyallowed: publickey authentication test: RSA key is allowed debug3: mm_request_send: entering, type 23 debug3: send packet: type 60 [preauth] debug2: userauth_pubkey: authenticated 0 pkalg rsa-sha2-256 [preauth] debug3: user_specific_delay: user specific delay 0.000ms [preauth] debug3: ensure_minimum_time_since: elapsed 19.018ms, delaying 1.849ms (requested 5.217ms) [preauth] Postponed publickey for user1 from 10.7.141.243 port 44750 ssh2 [preauth]
非常感謝您的熱心幫助!
ssh
使用終端 ( ) 提示並讀取密碼(或密碼)/dev/tty
,而不是其標準輸入。通過這種方式,您可以通過管道傳輸/重定向數據,ssh
並且仍然可以在被詢問時提供密碼。但是要不通過終端提供密碼,需要向 .com 出示“假”終端ssh
。這就是這樣sshpass
做的。當你
sshpass … ssh …
,在專用的模擬終端中sshpass
執行。ssh
這意味著ssh
不直接從您的終端讀取,sshpass
而是。並且ssh
不會直接列印到您的終端sshpass
。最終sshpass
將充當中繼,因此就像ssh
使用您的終端一樣。但在此之前,sshpass
攔截ssh
列印的內容;它還會注入您在 之後指定的字元串-p
,然後ssh
“看到”來自終端ssh
正在使用的字元串(這不是您的終端)。這種方式ssh
可以欺騙你輸入密碼,當它是sshpass
“輸入”的人時。預設情況下
sshpass
,等待assword:
(或assword
1?)作為密碼提示的一部分出現。例如,如果您沒有使用密鑰並且沒有使用sshpass
,ssh
則會列印:user1@10.7.175.143's password:
它會等你輸入密碼。如果您曾經
sshpass
提供過密碼,那麼sshpass
將攔截此消息並為您“鍵入”密碼。通過等待正確的提示sshpass
知道何時ssh
需要密碼,然後它才會傳遞您的密碼。在你的情況下,提示是不同的。
ssh
沒有要求輸入密碼,它使用不同的提示要求輸入密碼。提示ssh
是準確Enter passphrase for key '/home/user1/.ssh/id_rsa':
的,沒有任何匹配assword:
的,所以sshpass
一直等待從未出現過的預設提示。用於
-P
覆蓋預設值。
-P
設置密碼提示。Sshpass 在程序向 TTY 的輸出中搜尋此提示,以指示何時發送密碼。預設情況下 sshpass 查找字元串
assword:
(同時匹配Password:
和password:
)。如果您的客戶的提示不屬於上述任何一種,您可以使用此選項覆蓋預設值。(來源
man 1 sshpass
:)在您的情況下,它可能是:
sshpass -P assphrase -p "pass" ssh user1@10.7.175.143
現在,如果
sshpass
攔截Enter passphrase …
來自ssh
,它將以您在之後指定的任何內容進行響應-p
。接下來,它將作為您的終端和ssh
正在使用的終端之間的中繼;它會變得透明。通常
sshpass
可用於向通常使用終端(與 stdin+stdout+stderr 相對)提示和讀取密碼的任何工具提供密碼(一般為字元串)。-P
允許您根據工具使用的提示調整命令。1手冊說
assword:
,但你的輸出sshpass -v
說using match "assword"
。您需要以一種或另一種方式-P
正確傳遞密碼。