[server] 링크 다운시 autossh가 ssh를 종료하지 않습니다

나는 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가 아무것도 할 수 없지만 내 의견으로는 다음을 수행해야한다고 이해합니다.

  1. 자식 ssh 프로세스 확인 ( check on child ...)
  2. 원단을 확인하십시오 !!! (터널을 통한 핑과 같은 작업)
  3. 터널이 다운되었음을 인식
  4. ssh 프로세스를 중지하십시오
  5. 터널을 다시 생성하십시오
  6. 작동하지 않는다는 것을 인식하고 (지수 적으로 증가합니까?) 타이머를 설정하여 곧 다시 확인하십시오.

이것이 내가 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를 다시 시작하려고 시도 할 수 있습니다.


답변