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 …
。これは、端末から直接読み取ることができないことを意味します。端末に直接印刷されません。これは最終的に中継として機能するため、端末を使用するのと同じです。ただし、その前に印刷される内容を傍受し、後で指定した文字列も挿入し、その文字列が使用中の端末(あなたの端末ではない)から出るか「確認」します。この方法はあなたをだますことができますsshpass
ssh
ssh
sshpass
ssh
sshpass
sshpass
ssh
sshpass
ssh
-p
ssh
ssh
ssh
タイプされたパスワードは、sshpass
誰が「入力」する場合です。
デフォルトでは、sshpass
スタンバイassword:
(またはassword
1?)はパスワードプロンプトの一部として発生します。たとえば、キーを使用せずに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
パスワードを正しく渡す必要があります。