내가 찾은이 문제ServerAliveInterval
, 죄송합니다. 허용된 응답에 언급된 두 변수의 설정을 잘 이해하지 못합니다 . ClientAliveInterval
로컬 서버 시간이 초과되면 이 값을 0으로 설정해야 합니까? 그러면 시간 초과가 발생하지 않나요? 300초 또는 다른 값으로 설정해야 합니까?
내 문제는 간단합니다. 응답을 통해 랩탑을 일시 중지했다가 일시 중지를 해제하면 일부 연결 시간이 초과되고 Write failed: Broken pipe
다른 연결은 그렇지 않습니다. 손상된 파이프로 인해 실패하지 않도록 로컬 sshd를 올바르게 구성하려면 어떻게 해야 합니까?
답변1
서버 활동 간격: 초고객연결을 유지하기 위해 서버에 빈 패킷을 보내기 전에 기다립니다.
클라이언트 활동 간격: 초섬기는 사람빈 패킷을 클라이언트에 보내기 전에 기다립니다(연결을 유지하기 위해).
값을 0(기본값)으로 설정하면 이러한 기능이 비활성화되므로 너무 오랫동안 유휴 상태일 경우 연결이 끊어질 수 있습니다.
ServerAliveInterval은 연결을 유지하기 위한 가장 일반적인 전략인 것 같습니다. 파이프 파손 문제를 방지하기 위해 .ssh/config 파일에서 사용하는 SSH 구성은 다음과 같습니다.
Host myhostshortcut
HostName myhost.com
User barthelemy
ServerAliveInterval 60
ServerAliveCountMax 10
위의 설정은 다음과 같이 작동합니다.
- 클라이언트는 60초(ServerAliveInterval 시간) 동안 유휴 상태로 대기한 후 "no-op 빈 패킷"을 서버에 보내고 응답을 기다립니다. 응답이 없으면 10(ServerAliveCountMax)회(600초)까지 위 프로세스를 계속 시도합니다. 서버가 여전히 응답하지 않으면 클라이언트의 SSH 연결이 끊어집니다.
서버 측의 ClientAliveCountMax도 도움이 될 수 있습니다. 이는 클라이언트가 연결을 끊기 전에 응답하지 않을 수 있는 시간 제한입니다. 기본값은 3(3개의 ClientAliveIntervals)입니다.
답변2
이에 대한 설명은 다음과 같습니다.sshd_config
수동( man sshd_config
):
ClientAliveInterval
클라이언트로부터 데이터가 수신되지 않는 경우 sshd가 암호화된 채널을 통해 메시지를 보내 클라이언트로부터 응답을 요청하는 시간 초과 간격(초)을 설정합니다.기본값은 0이며, 이는 이러한 메시지가 클라이언트에 전송되지 않음을 의미합니다.이 옵션은 프로토콜 버전 2에서만 사용할 수 있습니다.
ClientAliveCountMax
기본값은 3입니다.
ClientAliveInterval
(아래 참조) 15로 설정하고 기본값ClientAliveCountMax
으로 두면 응답하지 않는 SSH 클라이언트는 약 45초 후에 연결이 끊어집니다. 이 옵션은 프로토콜 버전 2에서만 사용할 수 있습니다.
클라이언트 옵션에 대해서는 다음 지침을 참조하세요 man ssh_config
.
ServerAliveInterval
ssh
서버에서 데이터가 수신되지 않는 경우 서버에 응답을 요청하기 위해 암호화된 채널을 통해 메시지가 전송되는 시간 초과 간격(초)을 설정합니다 .기본값은 0이며, 이는 이러한 메시지가 서버로 전송되지 않음을 의미합니다.이 옵션은 프로토콜 버전 2에서만 사용할 수 있습니다.
ServerAliveCountMax
기본값은 3입니다. 예를 들어,
ServerAliveInterval
15로 설정하고 기본값으로 두면ServerAliveCountMax
서버가 응답하지 않으면ssh
약 45초 후에 연결이 끊어집니다 . 이 옵션은 프로토콜 버전 2에서만 사용할 수 있습니다.
위의 내용에 따르면 0은 비활성화됨을 의미합니다. 그러므로 이러한 값을 충분히 높게 설정하여 다음과 같은 문제가 발생하지 않도록 해야 합니다.깨진 파이프실수.
답변3
Barthelemy의 답변은 훌륭하지만 실제로 문제의 근본 원인에 도달하지는 않습니다. 컴퓨터를 일시 중단하고 컴퓨터를 시작할 때 SSH 세션이 활성화되기를 원합니다.
연결을 유지하기 위해 ssh에 대한 구성은 없습니다. SSH는 TCP를 사용하므로 처음에는 3방향 핸드셰이크가 필요하고 유휴 시간이 지나면 활성 상태를 유지합니다. 종료/최대 절전 모드를 수행하면 FIN을 통해 모든 TCP 연결이 닫힙니다. 이것을 극복할 방법이 없습니다.
더러운 해결 방법의 경우 VPS 또는 화면이 있는 기타 온라인 상자를 사용하여 연결을 유지할 수 있습니다. 내 조언은 보안상의 이유로 이 작업을 수행하지 않는 것입니다.
답변4
장기 실행 세션을 화면 내에 배치합니다. 자세한 내용은 screen -h를 참조하세요.
이렇게 하면 SSH를 사용하여 컴퓨터에 다시 연결하고 screen 세션에 다시 연결할 수 있습니다.