연결이 끊어지고 SSH가 켜져있을 때 터미널이 정지


18

그놈 터미널 탭에서 인터넷을 통해 서버로 ssh 할 때 인터넷 연결이 끊어지면 터미널 탭이 멈추고 입력을받지 않습니다. 왜 끊어?

터미널 탭을 활성화하는 방법이 있습니까? 즉, 로컬 셸 프로세스를 계속 실행합니까?

터미널 탭을 닫는 것이 유일한 방법입니까?

답변:


20

지정된 시간 ClientAliveIntervalClientAliveCountMax매개 변수 및 해당 클라이언트 측에서 설정 한 후에 SSH 연결이 자동으로 끊어집니다 . 이러한 시간 초과가 매우 높은 경우 셸이 정지됩니다. 그러나 사용 OpenSSH하는 경우 시간 초과를 기다릴 필요가 없으며 이스케이프 문자를 사용하여 강제로 연결을 닫을 수 있습니다 .

ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number
of functions through the use of an escape character.  A single
tilde character can be sent as ~~ or by following the tilde by a
character other than those described below. The escape character
must always follow a newline to be interpreted as special. The
escape character can be changed in configuration files using the
EscapeChar configuration directive or on the command line by the
-e option.
The supported escapes (assuming the default ‘~’) are:

~.
    Disconnect.
(...)

연결이 멈 추면 ~(즉, Shift+ `키를 함께 누름) 연결을 해제하고를 누릅니다 .. 또는 불안정한 연결로 작업하거나 autossh 를 사용 하여 손실 된 연결을 자동으로 갱신 할 수있을 때마다 원격 서버에 연결해야하는 경우 매우 편리합니다.

편집 :

그러나 두 경우 ClientAliveInterval와는 ServerAliveInterval명시 적으로 0으로 설정하거나 명시 적으로 설정되지 않고는 다음에 따라 기본적으로 0으로 설정 sshd_config하고 ssh_config부터 (맨은, 제한 시간 설정이 다음 파일에 설정되어 http://tldp.org/HOWTO/TCP- Keepalive-HOWTO / usingkeepalive.html ) :

  # cat /proc/sys/net/ipv4/tcp_keepalive_time
  7200

  # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
  75

  # cat /proc/sys/net/ipv4/tcp_keepalive_probes
  9

  The first two parameters are expressed in seconds, and the last is
  the pure number. This means that the keepalive routines wait for
  two hours (7200 secs) before sending the first keepalive probe,
  and then resend it every 75 seconds. If no ACK response is
  received for nine consecutive times, the connection is marked as
  broken.

이 3 개의 파일을 사용하여 수정 echo하면 고정 된 SSH 세션이이 값에 따라 연결이 끊어진 것을 확인할 수 있습니다.


6
ssh가 처음 또는 Enter 다음에 이스케이프 문자 만 인식한다는 점을 추가하고 싶습니다. ssh 연결이 멈 추면 Enter 키가 종종되었지만 항상 이전에 누른 마지막 문자는 아닙니다. 따라서 Enter ~ .연결을 종료하는 시퀀스로 익숙해지는 것이 좋습니다 .
egmont

감사. /proc/sys/net/ipv4/tcp_keepalive*파일 ClientAliveIntervalServerAliveInterval 작업 방법이 아직 명확하지 않습니까? 그것들은 모두 같은 설정, 즉 ssh 연결을 유지하기위한 것입니까? 이전 파일은 ssh 연결뿐만 아니라 다른 TCP 연결에도 사용됩니까?
15:09에 모든

또 다른 질문 : 왜 "이러한 시간 초과가 상당히 높은 경우 셸이 정지됩니다." "시간 초과가 상당히 높다"는 것은 무엇을 의미합니까? 지정된 시간 동안 활동이 없으면 껍질이 항상 얼지 않습니까? 또는 활동이 부족한 경우 쉘이 동결되지 않지만 자동으로 종료되는 것을 의미합니까?
15:36에 모든

@ 팀 : 1. /proc/sys/net/ipv4/tcp_keepalive*위해뿐만 아니라이다 ssh(d)하지만 내가 링크 된 문서에서 말한대로 :Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive, but you can easily add keepalive support for most of them following the instructions explained later in this document.
ARKADIUSZ Drabczyk

@Tim : 2. 예를 들어 상당히 높은 것은 2 시간을 의미합니다. 세션 연결이 끊어지기 전에 2 시간 동안 기다려야합니다. 테스트를 수행하십시오-원격 호스트와 연결 sshd하거나 원격 시스템을 종료하거나 케이블을 제거하고 고정 된 ssh 세션이 자체적으로 종료되는 시기를 확인하십시오 . 하여 frozen shell비활성 I 평균 쉘, 어떤 키를하지 않고 아무 것도 인쇄되지 않습니다.
Arkadiusz Drabczyk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.