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に減らします。会話ができればログインも可能です。