내 업무 컴퓨터에서는 관련되지 않은 두 개의 서버에 정기적으로 SSH를 사용합니다. 때때로 SSH 세션이 잠깁니다(키보드 입력에 응답하지 않음). 잠겨 있으면 두 번째 개방형 터미널을 통해 SSH를 사용할 수 있으며 작동하지만 고정된 터미널이 고정 해제되지는 않습니다. ~.
터미널 연결이 끊어지고 로컬 CLI가 제공되기 전에 키를 누르는 데 시간이 걸립니다. 저는 정기적으로 집에서 두 서버 모두에 아무런 문제 없이 SSH를 통해 연결하므로 로컬 업무 컴퓨터에 문제가 있는 것으로 의심됩니다.
다른 단말기에서도 이런 문제가 발생하나요? 예, 이 문제는 Konqueror와 Terminator 모두에서 발생합니다.
두 원격 서버 모두에서 동시에 문제가 발생합니까? 아니요
이 문제가 서버에서 실행되는 특정 응용 프로그램에서 발생합니까? CLI 또는 VIM에서 GNU 화면 유무에 관계없이.
테스트 목적으로 저는 4개의 터미널만 열었습니다. Konqueror 터미널 2개(각 서버당 하나씩)와 Terminator 터미널 2개(서버당 하나씩)만 열었습니다. 약 한 시간쯤 지나자 한쪽(터미네이터) 단말기만 잠겼다. 동일한 서버의 다른 터미널은 잠겨 있지 않으며 다른 서버의 터미널도 잠겨 있지 않습니다. 물론 잘못된 Ctrl-S가 전송되고 있는지 확인하기 위해 잠긴 터미널에서 Ctrl-Q를 사용해 보았으나 문제가 해결되지 않았습니다. 화면이 잠긴 터미널(SSH를 실행하는 기본 세션 또는 SSH 세션 자체)에서 실행되고 있지 않습니다.
고쳐 쓰다:한 시간 후 Terminator의 잠긴 서버는 마침내 "쓰기 실패: 깨진 파이프" 메시지와 함께 연결이 끊어졌고 로컬 CLI는 제대로 작동하며 Konsole의 두 서버도 모두 잠겼습니다.
답변1
SSH는 일반적으로 유휴 상태일 때 아무 것도 보내지 않기 때문에 체인에 있는 문제로 인해 유휴 연결 시간이 초과됩니다. 그러나 무료일 때 주기적으로 메시지를 보내도록 할 수 있습니다. OpenSSH 3.8 이상:
$ ssh -oServerAliveInterval=60 myremotebox
이 호스트에 자주 수동으로 액세스 하려는 경우 ssh
다음을 파일에 넣을 수 있습니다 ~/.ssh/config
.
Host myremotebox
ServerAliveInterval=60
이는 다른 데이터를 보내지 않은 후 60초마다 빈 패킷을 보내도록 지시합니다. 나는 다양한 인프라에서 이것이 연결을 활성 상태로 유지하기에 충분하다는 것을 발견했습니다.
OpenSSH 3.8 이전 버전에는 이 옵션이 없었지만 대체 기능이 더 약했습니다. KeepAlive
다음을 사용하는 이 옵션을 설정할 수 있습니다.TCP 연결 유지. 작동 방식은 운영 체제에 따라 다르며 동작을 자주 변경하면 모든 응용 프로그램에 영향을 미칩니다. 설상가상으로 네트워크 스택은 일반적으로 기본적으로 2시간마다 TCP keepalive를 보냅니다.가지다이 방법을 사용하려면 SSH 연결 시간이 초과되는 이유가 유휴 임계값이 2시간보다 훨씬 낮기 때문에 기본값을 변경하십시오.
3.8+ 문서를 읽는 경우에도 이는 TCPKeepAlive
동일한 옵션입니다 . 3.8에 "서버가 활성 상태입니다" 옵션을 추가했을 때 둘을 구별하기 KeepAlive
위해 이름을 바꿨습니다.TCPKeepAlive