쉘 스크립트는 서버에 대한 연결을 종료하지만 연결은 계속 열어 둡니다.

쉘 스크립트는 서버에 대한 연결을 종료하지만 연결은 계속 열어 둡니다.

여러 장치의 이름을 기본값으로 바꾸는 linux/Fedora 서버에서 쉘 스크립트를 생성/실행 중입니다. 첫 번째 장치에서 완료되면 연결이 닫히지 않기 때문에 정지됩니다. 스크립트의 기본값은 ips이고 네트워크 서비스를 다시 시작합니다. 장치에서 실행할 때 연결을 어떻게 닫나요?

재설정하는 스크립트는 다음과 같습니다.

/bin/ssh $CHECKME -o ConnectTimeout=5 "/usr/local/bin/NameTerm.sh reset"

여기 CHECKME에서 연결된 장치의 IP를 가져오면 정상적으로 작동합니다. NameTerm.shIP 주소를 다시 0.0.0.0으로 설정한 후 서비스 네트워크를 다시 시작하는 쉘 스크립트입니다 . 스크립트를 변경할 수 없습니다.

답변1

SSH 서버가 사라지더라도 클라이언트 입장에서는 TCP 연결이 계속 존재하며 SSH 클라이언트는 기본적으로 이를 기다립니다.

ConnectTimeout옵션은 다음 상황에서 사용되는 이름에 따라 차이가 없습니다.연결하다, 연결이 이미 활성화된 경우가 아닙니다.

ServerAliveInterval대신 다음을 사용 하고 싶을 수도 있습니다 ServerAliveCountMax.

ServerAliveCountMax

ssh(1)가 서버로부터 메시지를 다시 받지 못하는 경우 보낼 수 있는 서버 활성 메시지 수(아래 참조)를 설정합니다. 서버 활동 메시지를 보내는 동안 이 임계값에 도달하면 ssh는 서버와의 연결을 끊고 세션을 종료합니다.

ServerAliveInterval     

서버로부터 데이터가 수신되지 않는 경우 ssh(1)가 암호화된 채널을 통해 메시지를 보내 서버에 응답을 요청하는 시간 초과 간격(초)을 설정합니다. 기본값은 0이며, 이는 이러한 메시지가 서버로 전송되지 않음을 의미합니다.

이는 약 3x5 = 15초를 기다리게 되지만 ServerAliveCountMax기본값은 3이므로 ServerAliveInterval.

ServerAliveCountMax 3
ServerAliveInterval 5

관련 정보