나는 autossh witt를 30 초의 폴링 시간으로 시작했다.
AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1
그리고 잘 작동합니다.
Sep 5 12:26:44 serverA autossh[20935]: check on child 23084
Sep 5 12:26:44 serverA autossh[20935]: set alarm for 30 secs
그러나 네트워크 케이블을 물리적으로 제거하면 터널이 더 이상 작동하지 않으므로 autossh는 ssh 데몬을 종료하지 않습니다. 왜? 링크가 다운되면 autossh가 아무것도 할 수 없지만 내 의견으로는 다음을 수행해야한다고 이해합니다.
- 자식 ssh 프로세스 확인 (
check on child ...
) - 원단을 확인하십시오 !!! (터널을 통한 핑과 같은 작업)
- 터널이 다운되었음을 인식
- ssh 프로세스를 중지하십시오
- 터널을 다시 생성하십시오
- 작동하지 않는다는 것을 인식하고 (지수 적으로 증가합니까?) 타이머를 설정하여 곧 다시 확인하십시오.
이것이 내가 autossh를 실행하는 이유입니다. 터널에 문제가 발생하면 (소프트웨어 또는 하드웨어 문제 일 경우) 다시 시작해야합니다. 대신 ssh 프로세스가 종료되기를 기다리는 중입니다. 연결을 재설정 할 희망이 없어도 다시 시작하려고해서는 안됩니까?
어떤 종류의 검사가 autossh를 수행합니까? ssh가 작동하고 있는지 확인하십시오. 원단 검사를하지 않습니까?
편집하다
요청에 따라 ssh 구성의 관련 부분을 추가합니다.
# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
# that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
# be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
# be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
# specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60
TCPKeepAlive yes
답변
그러나 네트워크 케이블을 물리적으로 제거하면 터널이 더 이상 작동하지 않으므로 autossh는 ssh 데몬을 종료하지 않습니다. 왜?
autossh는 클라이언트 시스템에서 실행되므로 서버에서 ssh 데몬 프로세스를 직접 종료 할 수 없습니다. 그러나 서버 ClientAliveInterval
에서 /etc/ssh/sshd_config
에 0이 아닌 값을 지정하고 (참조 man sshd_config
) 서버 에서 sshd 서비스를 다시 시작하여 구성 변경을 적용 할 수 있습니다. 그런 다음 네트워크 연결이 끊어지면 ssh 데몬 프로세스가 ClientAliveInterval * ClientAliveCountMax
몇 초 후에 종료 됩니다 (autossh가 아님).
당신이 물어 의미 지금, 만약 “왜 ssh 클라이언트 프로세스를 강제 종료 autossh하지 않는 이유는 무엇입니까?” 을 지정했습니다 -M 0
. autossh 매뉴얼 페이지에서 :
Setting the monitor port to 0 turns the monitoring function off, and autossh will only restart ssh upon ssh's exit
.
autossh를 사용하여 연결을 모니터링하는 대신 시간 초과 ( ServerAliveCountInterval * ServerAliveCountMax
초) 후에 ssh가 종료되기를 기다리고 있습니다. 연속 검사를 분리하는 60 초 간격으로 ssh가 종료되기 전에 60 개의 서버 작동 점검을 요청 했으므로 ssh 클라이언트가 종료되기 1 시간 전에 대기합니다.
ExitOnForwardFailure
클라이언트 측 에서 옵션을 사용하는 것도 고려할 수 있습니다 (참조 man ssh_config
). 터널을 설정할 수없는 경우 ssh가 종료 된 다음 autossh가 ssh를 다시 시작하려고 시도 할 수 있습니다.