公開鍵認証が失敗した場合、パスワードの入力を求めるのではなく、sshを失敗させるにはどうすればよいですか?


107

公開鍵認証を使用して複数のサーバーをsshするスクリプトがあります。構成の問題により、サーバーの1つがスクリプトのログインを停止しました。これは、スクリプトが「パスワード:」プロンプトでスタックし、明らかに応答できないため、残りのサーバーも試さないことを意味します。リスト内。

キー認証が失敗した場合にパスワードの入力を求めず、代わりに接続エラーを報告してスクリプトを続行するようにsshクライアントに指示する方法はありますか?

回答:


138

OpenSSHにはBatchModeがあり、パスワードプロンプトの無効化に加えて、キーのパスフレーズのクエリを無効にする必要があります。

BatchMode

「yes」に設定すると、パスフレーズ/パスワードの照会が無効になります。このオプションは、パスワードを入力するユーザーがいないスクリプトおよびその他のバッチジョブで役立ちます。引数は「はい」または「いいえ」でなければなりません。デフォルトは「no」です。

サンプル使用法:

ssh -oBatchMode=yes -l <user> <host> <dostuff>

これにより、公開キー認証が無効になりました。ただし、ssh user @ host -C somecommandと指定していました。私のために働いたのはただssh user@host -oPreferredAuthentications=publickey -C 'echo success'
ABキャロル

20

に次を追加します~/.ssh/config

PasswordAuthentication no

サーバーでパスワード認証を無効にするには、同じ行を追加し/etc/ssh/sshd_configて再起動しsshdます。


7
すべてのSSHクライアント接続でパスワード認証を無効にしたくない場合は、コマンドラインでオプションを指定することもできます。sshコマンドに「-oPasswordAuthentication = no」を追加します。
cas

7
これは、パスワードプロンプトを妨げません。OPのスクリプトは引き続きハングします。
ジョシュアスウィンク

11

dropbearを使用している場合は、「-s」オプションを追加してパスワード認証を無効にします。


4
クライアントがopensshであると仮定しない場合の+1 :
cas

8

コマンドライン(または~/.ssh/config)で設定できますPreferredAuthentications

PreferredAuthentications=publickey

コマンドラインでは、オプションを引用符で囲んでから-oオプションに渡す必要があると思います。
クレイグウォーカー

3
であるとしてまたすなわち、それを渡すことができます@CraigWalkerssh -o PreferredAuthentications=publickey
トビアスKienzler

@CraigWalkerオプションと値を区切るためにスペースを使用する場合は、引用符が必要です。たとえばssh "-oPreferredAuthentications publickey"
Timo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.