연결이 실패하더라도 SSH 프로세스는 활성 상태로 유지됩니까?

연결이 실패하더라도 SSH 프로세스는 활성 상태로 유지됩니까?

SSH 터널을 설정하려고 할 때 연결이 실패하더라도 프로세스가 활성 상태로 유지되는 것을 확인했습니다. 예를 들어 hostname종료 시 다음 명령을 실행 하려고 하면 다음과 같습니다 .

/usr/bin/ssh -f -i /home/user/.ssh/id_rsa -N -R 3000:localhost:22 user@hostname

가끔 다음과 같은 답변을 받습니다.

Warning: remote port forwarding failed for listen port 3000

원래 프로세스(로컬 시스템에서 실행 중)가 종료되었지만 원격 서버가 아직 이를 인식하지 못하는 경우에만 이 오류 메시지가 나타납니다. 프로세스가 다시 시작을 시도하지만 서버는 여전히 3000개의 연결이 있다고 생각하고 새 연결을 제외하지 않아 위의 경고가 발생합니다.

그런데 이렇게 하면 pgrep -x ssh그 과정이 아직 남아 있다는 걸 알 수 있어요. 터널이 설정되었는지 먼저 확인하고 그렇지 않은 경우 다시 설정하는 bash 스크립트의 일부로 cronjob에서 이 ssh 명령을 실행하고 싶지만 스크립트를 설정하는 방식은 a) 터널이 다운된 것을 확인하고 시도합니다. (은밀히 실패할) 새 프로세스를 생성하거나 b) 실패한 프로세스가 여전히 존재하는지 확인하고 아무 작업도 수행하지 않습니다. 결과적으로 실패한 프로세스가 지속되는 한 터널은 다시 설정되지 않습니다.

연결이 실패하면 경고를 받는 대신 프로세스를 직접 종료하는 방법이 있습니까?

답변1

답을 찾을 수 있는 다른 사람을 위해 제가 찾던 옵션을 찾았습니다.이 답변: -o ExitOnForwardFailure=True좀비 프로세스를 생성하는 대신 포트 전달 실패 시 ssh를 강제로 종료하는 명령을 추가합니다.

/usr/bin/ssh -f -i /home/user/.ssh/id_rsa -N -R 3000:localhost:22 user@hostname -o ExitOnForwardFailure=True

답변2

ClientAliveInterval을 사용해 보세요.

sshd_config

     ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has been received from the client, sshd(8) will send a message through
         the encrypted channel to request a response from the client.  The default is 0, indicating that these messages will not be sent
         to the client.

관련 정보