パスワードを要求せずにパスワードのないアクセスに対してSSHをテストする方法は?

パスワードを要求せずにパスワードのないアクセスに対してSSHをテストする方法は?

新しいサーバーを設定するための無人シェルスクリプトを作成しています。これを複数回実行できるので、パスワードのないSSHアクセスが確立されていることを確認したいと思います。このようなコマンド

ssh newhost.example.com /bin/true

アクセスが存在する場合は正常に終了しますが、アクセスが存在しない場合はパスワードを待っている間停止します。

パスワードのないアクセスが設定されていない場合は、そのコマンドがすぐに失敗するように、そのコマンドへのパスワードのアクセシビリティをオフにする方法はありますか?

答え1

このオプションをオフにできますPasswordAuthentication

ssh -o PasswordAuthentication=no newhost.example.com /bin/true

255パスワードのないアクセスが拒否されると、パスワードの入力を求められず、すぐに終了コードが返されます。

答え2

ssh公開鍵認証のみを使用したいことを知らせるには、次のようにします。PreferredAuthentications構成オプション

インタラクティブ:

ssh -o PreferredAuthentications=publickey newhost.example.com /bin/true

または~/.ssh/configファイルから:

# or Host *.example.com, or Host *
Host newhost.example.com
  PreferredAuthentications=publickey

答え3

それでも相互作用の問題が発生する可能性がssh -o PasswordAuthentication=no newhost.example.com /bin/trueあります。

$ ssh -o PasswordAuthentication=no newhost.example.com /bin/true
The authenticity of host 'newhost.example.com (a.b.c.d)' can't be established.
ECDSA key fingerprint is SHA256:<fingerprint>.
Are you sure you want to continue connecting (yes/no)?

IMHO、より良いオプションは、BatchModeでsshを実行することです。

$ ssh -o BatchMode=yes newhost.example.com /bin/true
Host key verification failed.
$ echo $?
255

SSHパスワードなしのログインが設定され実行されている場合、SSHは指紋を確認する必要はなく、実行中としてマークされます。

関連情報