Ssh

“ssh”有效,但“sshpass”無效——這怎麼可能?

  • November 26, 2021

我為 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:(或assword1?)作為密碼提示的一部分出現。例如,如果您沒有使用密鑰並且沒有使用sshpassssh則會列印:

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 -vusing match "assword"。您需要以一種或另一種方式-P正確傳遞密碼。

引用自:https://unix.stackexchange.com/questions/679175