SSH 연결이 닫혔는지 확인할 수 있나요?

SSH 연결이 닫혔는지 확인할 수 있나요?

2개의 Linux 시스템이 있습니다. 한 시스템은 SSH를 통해 다른 컴퓨터에 지속적으로 연결됩니다.

연결이 닫힌 것을 감지하면 SSH를 통해 다시 연결하고 특정 명령을 실행합니다.

이것이 가능한가?

나는 cronjob을 보았지만 ssh가 연결을 닫는 등의 것을 감지하지 못했습니다.

답변1

연결이 끊어지면 ssh가 종료되므로 무한 루프에서 ssh를 시작하는 스크립트를 작성하거나 ssh가 코드 255(오류 발생)로 종료될 때 반복되는 조건 루프에서 작성할 수 있습니다. 이렇게 하면 스크립트는 ssh가 종료될 때까지 기다렸다가 오류로 인해 다시 시작합니다. 또는 Adrian Zaugg가 제안한 대로 사용할 수 있습니다 autossh. 보다 구체적인 답변을 얻기에 충분한 설정 세부 정보를 지정하지 않았습니다.

이는 "일반적인" 예이지만 특정 상황에 따라 작동하지 않을 수도 있습니다.

  1. 서버는 공개 키 인증을 허용하도록 설정되어야 하며 클라이언트의 공개 키는 승인되어야 합니다.

  2. 클라이언트 시스템의 ~/.ssh/config 파일은 ssh 클라이언트가 연결 끊김을 감지하기 위해 상호 작용하고 ping 패킷을 보낼 필요가 없도록 연결할 호스트를 설정해야 합니다.

Host serverhost
User username
IdentityFile /home/user/.ssh/id_rsa
ServerAliveInterval 30
ServerAliveCountMax 2

여기 설정은 IdentityFile인증에 사용되는 개인 키의 이름, ServerAliveInterval핑 사이의 시간(초), ServerAliveCountMax응답하지 않는 핑으로 인해 SSH가 종료되는 횟수입니다. 위의 설정을 사용하면 1분 후에 연결이 끊어진 것을 감지합니다.

  1. 스크립트는 한 번만 시작해야 합니다(또는 해당 PID를 기억하고 다시 시작할 때 이전 인스턴스를 종료해야 함). 스크립트는 다음과 같습니다.
#!/bin/sh
while true ; do
  ssh serverhost
  if [ $? -ne 255 ] ; then
     break
  fi
done

이는 sh 쉘이 설치되어 있고 개인 키에 비밀번호가 없으며 SSH 세션이 백그라운드에서 실행되는 것을 원하지 않으며 SSH 세션을 완전히 종료할 때까지 스크립트를 다시 시작하지 않을 것이라고 가정합니다. 그것은 가정이 많기 때문에 앞서 말했듯이 명확하게 대답하려면 세부 사항이 필요합니다. 죄송합니다. 추측할 시간이 없습니다.

관련 정보