sshdが接続する準備ができているかどうかはどうすればわかりますか?

sshdが接続する準備ができているかどうかはどうすればわかりますか?

bashスクリプトを使用してリモートサーバーを再起動し、SSH経由でログインしていくつかのコマンドを実行しました。私のスクリプトはほとんどの場合動作しますが、時には次のエラーで失敗します。

「システムが起動します。権限のないユーザーはまだログインできません。後でもう一度やり直してください。技術的な詳細については、pam_nologin(8)を参照してください。」

数秒待ってからやり直すと正常に動作します。現在、次のように接続を確認しています。

while ! nc -z $HOST 22; do
  sleep 1
done

ssh $HOST '/opt/my script..sh'

sshdが実際に接続する準備ができていることを確認するために接続をテストするより良い方法はありますか?

答え1

sshが接続を受け入れてコマンドを実行する準備ができているかどうかをテストするには、ssh同様のものではなくsshを使用しますnc。たとえば、

while ! ssh $HOST true; do
  sleep 1
done

(a)リモートホストに正常に接続でき、(b)コマンドを実行できる場合にのみtrue成功が返されます。

答え2

早くログインする必要がない場合は、root単に開始を延期することができますsshd

SSHサービスユニットに追加します。

After=systemd-user-sessions.service

sshd権限のないユーザーにログインが許可されている場合にのみ開始されます。

これは以前のSSHログインを許可しません。 SSH状態を3から2に減らします。会話ができればログインも可能です。

関連情報