「ssh」は機能しますが、「sshpass」は機能しません。これはどのように可能ですか?

「ssh」は機能しますが、「sshpass」は機能しません。これはどのように可能ですか?

SSH接続用の鍵ペアを構成しました。動作しますが、もちろんパスワードが必要です。

ssh [email protected]

これで、インストールしたsshpassを使用してログインしようとします。プロパティを試してみましたが、プロパティも試して-pみましたが、-f何も機能しません。ただ停止します。

verboseはクライアント側でこの情報を提供します。

sshpass -v -p "pass" ssh [email protected]
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]

あなたの情熱的な助けに心から感謝します!

答え1

ssh標準入力の代わりに端末()を使用してパスワード(またはパスワードフレーズ)をプロンプトして読みます/dev/tty。これにより、データをパイプ/リダイレクトできssh、要求に応じてパスワードを提供できます。しかし、端末を介してパスワードを提供するのではなく、「偽の」端末を提供する必要がありますssh。それがまさにそのことですsshpass

専用エミュレート端末で実行している場合sshpass … ssh …。これは、端末から直接読み取ることができないことを意味します。端末に直接印刷されません。これは最終的に中継として機能するため、端末を使用するのと同じです。ただし、その前に印刷される内容を傍受し、後で指定した文字列も挿入し、その文字列が使用中の端末(あなたの端末ではない)から出るか「確認」します。この方法はあなたをだますことができますsshpasssshsshsshpasssshsshpasssshpasssshsshpassssh-psshsshsshタイプされたパスワードは、sshpass誰が「入力」する場合です。

デフォルトでは、sshpassスタンバイassword:(またはassword1?)はパスワードプロンプトの一部として発生します。たとえば、キーを使用せずにis not availableの場合、sshpass次のsshように印刷されます。

[email protected]'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 [email protected]

sshpassブロックEnter passphrase …が発生すると、後でssh指定したすべての項目に応答します-p。次に、あなたの端末とsshあなたが使用している端末との間の中継として機能します。

一般的に言えば、通常、sshpass端末を使用してパスワードを求めるメッセージを表示し、読み取るすべてのツールにパスワード(通常は文字列)を提供するために使用できます(stdin + stdout + stderrとは反対)。-Pツールの使用プロンプトに合わせてコマンドを調整できます。


1マニュアルにはそのように記載されていますがassword:、あなたの結果もそのように記載sshpass -vされていますusing match "assword"。どちらにしても-Pパスワードを正しく渡す必要があります。

関連情報