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


10

나는 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

시간 초과를 줄이려고하면 어떻습니까?
Nikolaidis Fotis

우리는 한동안 autossh를 사용했지만 특히 포트 전달과 결합 할 때 비정상적인 연결에서 너무 신뢰할 수 없었습니다. 우리는 이제 OpenVPN을 사용하고 매우 기쁘게 생각합니다.
Nils Toedtmann

@ NikolaidisFotis : 시간 초과가 좋습니다. 타임 아웃입니다. 그러나 타임 아웃이 시작될 때마다 즉, 상대방을 확인하는 것은 올바른 일을 하지 않습니다 !
dangonfast

@NilsToedtmann : 고마워요. 쉽게 구현할 수 있습니까? 좋은 하우투에 대한 링크가 있습니까?
dangonfast

OpenVPN은 매우 간단합니다. 우리는 그것을 ' dev tun설치 remote하여 설치'하고 클라이언트 구성의 설정과 설정 을 모두 사용하여 서버 또는 클라이언트의 기본 구성으로 시작했습니다 . 성가신 유일한 것은 인증서를 관리하는 것입니다. OpenVPN과 함께 제공되는 'easy-rsa'CA를 사용합니다. 인증서가 있으면 나머지는 쉽습니다.
Nils Toedtmann

답변:


11

그러나 네트워크 케이블을 물리적으로 제거하면 터널이 더 이상 작동하지 않으므로 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를 다시 시작하려고 시도 할 수 있습니다.


감사합니다. 나는 실제로 서버 프로세스가 아니라 "클라이언트 프로세스"를 의미했다.
dangonfast

그리고 후에 다시 읽기 나는 이유, 기억이 지금 autossh 맨 페이지를 -M 0: 그것은 모니터링 포트를 사용하는 것은 쉽지 않다, 그것은 간접적으로 권장하지 않습니다 : 여러면에서 이것은 모니터링 포트보다 더 나은 솔루션이 될 수 있습니다
dangonfast
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.