SSH 세션이 정지되지 않게하려면 어떻게해야합니까?


66

나는이 ServerAliveInterval거의 기계의 경우에도 ClientAliveInterval(I 좋은 생각되지 않을 것 이상의 그로 설정 가정 해 봅시다) SSH 클라이언트 / 서버 구성 파일에 540로 설정합니다. 현재 몇 분 후에 정지되는 많은 SSH 세션으로 작업합니다.

어떻게 고칠 수 있습니까? 내가 원하는 것은 세션이 전혀 멈추지 않는 것이므로 8시에 세션을 열고 4 시간 동안 사용하지 않으면 예를 들어 다시 로그인 할 필요없이 12시에 다시 사용할 수 있습니다. .


현재 네트워크에 연결되어 있지 않다고 가정하면 얼마나 오래 로그인 할 수 있습니까? TCPKeepAlive yes?
iyrin

확실하지 않지만 10 분. 많으면. 에 관해서는 것은 TCPKeepAlive yes- 시스템에 따라 달라집니다.
syntagma

11
그냥 mosh를 사용 합니까?
Vi.

1
또는 당신은 사용할 수 있습니다 autossh...
ThoriumBR

연결을 4 시간 동안 열어 두는 것이 보안상의 문제이므로 screen대신 사용해야합니다 . 하지만 1 ~ 2 분 후에도 같은 문제가 발생하여 여전히 귀하의 질문을지지하고 있습니다.
데일 앤더슨

답변:


80

당신이 변경 한 사항 /etc/ssh/ssh_config과는 /etc/ssh/sshd_config정확하지만 여전히 영향을주지 않습니다.

구성을 작동 시키려면 클라이언트에서 다음 구성을 변경하십시오.

/etc/ssh/ssh_config

Host *
ServerAliveInterval 100

ServerAliveInterval 클라이언트는 연결을 유지하기 위해 100 초마다 서버에 null 패킷을 보냅니다.

NULL 패킷 서버에서 클라이언트로 전송됩니다. 동일한 패킷이 클라이언트에 의해 서버로 전송됩니다. TCP NULL 패킷에는 서버가 클라이언트의 응답을 요구하지 않기 때문에 SYN, ACK, FIN 등과 같은 제어 플래그가 포함되어 있지 않습니다. NULL 패킷은 여기에 설명되어 있습니다 : https://tools.ietf.org/html/rfc6592

그런 다음 서버에서 sshd 부분을 구성하십시오.

/etc/ssh/sshd_config

ClientAliveInterval 60
TCPKeepAlive yes
ClientAliveCountMax 10000

ClientAliveInterval 서버는 60 초 동안 대기 한 후 연결을 유지하기 위해 클라이언트에 null 패킷을 보냅니다.

TCPKeepAlive 특정 방화벽이 유휴 연결을 끊지 않도록합니다.

ClientAliveCountMax Server는 클라이언트로부터 메시지를받지 못하더라도 클라이언트에게 살아있는 메시지를 보냅니다.

마지막으로 ssh server

service ssh restart 또는 사용중인 service sshd restart시스템에 따라 다릅니다.


ServerAliveCountMax가능한 한 신뢰할 수 있으려면 높은 것이 필요 하다고 생각 합니다. 두 경우 ServerAliveInterval와는 ClientAliveInterval충분히 낮게 설정되어, 나는에 대한 필요가있을 것입니다 생각하지 않습니다 TCPKeepAlive. 또한 미들 박스가있는 경우 이전에 언급 한 모든 설정이 정확하게 구성되어 있어도 상태가 손실 될 수 있습니다. MPTCP를 사용하는 것이 도움이 될 수 있습니다 (클라이언트와 서버 모두 지원하는 경우).
kasperd

클라이언트 쪽 또는 서버 쪽에서의 구성을 의미하는지 여부는 처음에 명확하지 않습니다 (결국 클라이언트 쪽이라고 결론지었습니다). 그런 다음 ServerAliveInterval 설명에서 "클라이언트는 서버로 전송합니다"라고 말하지만 다음 단락에서는 " 서버에서 클라이언트로 NULL 패킷 을 보냅니다". 나는 이것들이 약간 혼란 스럽다는 것을 안다.
Craig McQueen

1
서버에 추가 한 후 : / etc / ssh / ssh_config : 라인 57 : 잘못된 구성 옵션 : clientaliveinterval / etc / ssh / ssh_config : 라인 59 : 잘못된 구성 옵션 : clientalivecountmax
Anders

2
때문에 @Anders 당신은 오류 ClientAliveIntervalClientAliveCountMaxSSH 서버 옵션은 따라서 대한 의미 sshd_config가 아니라ssh_config
발렌틴 Bajrami

1
@chandresh 필요 없습니다. ssh_config새 세션을 수정 하면 해당 파일을 읽습니다. /etc/environment파일의 형식은 다른 일이 VAR="value" 공간에 따라서없이 VAR = "value"잘못된 것입니다. 소싱 /etc/ssh/ssh_config그 방법은 예를 읽을 것 Port 22또는 Host * 어떤 명령이라 취급합니다
발렌틴 Bajrami

13

개인 제안 : screen원격 호스트에서 사용; 터미널에서 활성 상태를 유지하는 한 연결을 유지합니다.

/etc/screenrc스크린 세션을 빠르게 식별 하기 위해 일반적으로 추가하는 내용은 다음과 같습니다 .

hardstatus alwayslastline
hardstatus string "%{= kG}[ %{G}%H %{g}][ %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]"
defscrollback 8192

편집 : 힌트.

hardstatus문자열 등이 하나 같이 하단 상태 표시 줄을 표시합니다 : 세 개의 열린 탭이있는 스크린 세션 예

스크롤 백 버퍼는 일반적인 1000-1500 대신 8192 라인으로 확장됩니다 (배포에 따라 다름).


감사합니다. 두 가지 질문이 있습니다. 1. screenrc제출 한 옵션을 설명 할 수 있습니까 ? 로그인 한 직후 시스템을 시작 화면 / tmux로 구성하려면 어떻게합니까?
syntagma

8
명확히하기 위해 screenssh 연결을 유지하지 마십시오. 연결하는 사용자 터미널과 관계없이 가상 터미널에서 프로세스를 실행 ssh하므로 프로세스가 연결에 의존하지 않습니다. 당신은 여전히 당신의 잃게됩니다 ssh문제가 해결 될 때까지 연결을.
iyrin

1
" 연결을 활성 상태로 유지 "한다는 것은 본질적으로 " 연결이 유휴 상태가되지 않음 "을 의미하며 이는 동일한 결과를 가져옵니다. 4 시간 동안 입력이 없으면 SSH 유휴 상태가되어 결국 연결을 닫으면 모든 하위 프로세스도 사라집니다.

2
내가 좋아하는 한 screen, 나는 새로운 사용자에게 시작하는 것이 tmux좋습니다.
dotancohen

2

OpenSSH로 :

활성화해야합니다

TCPKeepAlive yes

클라이언트 ssh_config (예 : /etc/ssh/ssh_config또는 ~/.ssh/config)와 OpenSSH를 실행하는 대상 SSH 서버 (예 : / etc / ssh / sshd_config) 둘 다

따라서 연결이 유휴 상태가 될 때마다 OpenSSH는 더미 패킷을 대상 호스트로 보냅니다.


이로 인해 연결이 The default is ''yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes. ...this means that connections will die if the route is down temporarily, and some people find it annoying. linux.die.net/man/5/sshd_config
iyrin

솔직히 말하지만 "[…] network goes down […] client host crashes […] route is down […]"SSH 구성이 잡을 수없는 심각한 오류입니다. 여기서 주요 문제는 네트워크 장애가 아닌 유휴 SSH 세션입니다. 따라서 요약하자면 다음과 같습니다.- TCPKeepAlive yes서버와 클라이언트 모두에서 활성화 합니다. - ClientAliveInterval 서버에 설정-서버에 설정 IdleTimeout-설정 ClientAliveCountMax 그 트릭을 수행해야합니다 ...
Martin Allert

2

문제가 최대 절전 모드의 랩톱 또는 네트워크 연결이 불량한 경우에는 mosh어느 쪽을 사용 ssh하고 자동으로 다시 연결할 수 있는지 사용 하는 것이 좋습니다 .

로부터 웹 사이트 :

모쉬 (모바일 쉘)

로밍을 허용하고 간헐적 인 연결을 지원하며 사용자 키 입력의 지능적인 로컬 에코 및 라인 편집 기능을 제공하는 원격 터미널 응용 프로그램입니다.

Mosh는 SSH를 대체합니다. 특히 Wi-Fi, 셀룰러 및 장거리 링크를 통해 더욱 강력하고 반응이 좋습니다.

Mosh는 GNU / Linux, BSD, macOS, Solaris, Android, Chrome 및 iOS에서 사용할 수있는 무료 소프트웨어입니다.

tmux(또는 이전 버전 screen) 과 함께 사용하면 ssh랩톱에서 서버 에 연결하여 Wi-Fi 연결을 변경하고 모바일 데이터 드롭 아웃이 남아있는 경우에도 며칠 동안 연결 상태를 유지할 수 있습니다.


여기에 링크하는 것입니다 mosh.org 하고 Github에서에 MOSH
joeytwiddle

1

호스트 컴퓨터에 SSHD 구성을 확인 /etc/sshd_config에 대한 IdleTimeout설정 .

IdleTimeout time
Sets idle timeout limit to time in seconds (s or nothing afternumber), 
in minutes (m), in hours (h), in days (d), or in weeks (w).If the 
connection have been idle (all channels) for that long time thechild 
process is killed with SIGHUP, and connection is closed down.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.