新しいサーバーを設定するための無人シェルスクリプトを作成しています。これを複数回実行できるので、パスワードのない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は指紋を確認する必要はなく、実行中としてマークされます。