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로 줄입니다. 대화가 가능하면 로그인도 가능합니다.

관련 정보