sshd_config의`ServerAliveInterval` 및`ClientAliveInterval` 옵션은 정확히 무엇입니까? 초로 설정해야합니까? 내 질문은 간단하게

나는 발견 이 질문을 하지만, 내가 아주 두 변수의 설정을 이해하지 못하는 죄송 ServerAliveInterval하고 ClientAliveInterval허용 응답 언급했다. 로컬 서버가 시간 초과되는 경우이 값을 0으로 설정해야합니까? 그런 다음 시간이 초과되지 않습니까? 대신 300 초로 설정해야합니까?

내 질문은 간단하게 응답 Write failed: Broken pipe과 함께 랩톱을 일시 중단 및 일시 중단 해제하면 일부 연결이 시간 초과 되고 일부는 응답 하지 않습니다. 부러진 파이프로 실패하지 않도록 로컬 sshd를 올바르게 구성하려면 어떻게해야합니까?



답변

ServerAliveInterval : 클라이언트 가 널 패킷을 서버에 보내기 전에 연결이 지속되도록 대기 하는 시간 (초 )입니다.

ClientAliveInterval : 연결을 유지하기 위해 서버 가 클라이언트에 null 패킷을 보내기 전에 대기 하는 시간 (초 )입니다.

값을 0 (기본값)으로 설정하면 이러한 기능이 비활성화되어 너무 오랫동안 유휴 상태 인 경우 연결이 끊어 질 수 있습니다.

ServerAliveInterval은 연결을 유지하는 가장 일반적인 전략 인 것 같습니다. 깨진 파이프 문제를 방지하기 위해 다음은 .ssh / config 파일에서 사용하는 ssh 구성입니다.

Host myhostshortcut
     HostName myhost.com
     User barthelemy
     ServerAliveInterval 60
     ServerAliveCountMax 10

위의 설정은 다음과 같은 방식으로 작동합니다.

  1. 클라이언트는 60 초 동안 유휴 대기하고 (ServerAliveInterval 시간) “no-op null packet”을 서버에 보내고 응답을 기대합니다. 응답이 없으면 10 (ServerAliveCountMax) 번 (600 초)까지 위의 프로세스를 계속 시도합니다. 서버가 여전히 응답하지 않으면 클라이언트는 ssh 연결을 끊습니다.

서버 측의 ClientAliveCountMax도 도움이 될 수 있습니다. 클라이언트가 연결을 끊기 전에 응답하지 않는 시간의 한계입니다. 세 개의 ClientAliveInterval에서와 같이 기본값은 3입니다.


답변

이것은 sshd_config매뉴얼 ( man sshd_config)에 설명되어 있습니다 :

ClientAliveInterval

클라이언트로부터 데이터가 수신되지 않은 경우 sshd가 암호화 된 채널을 통해 메시지를 보내 클라이언트로부터 응답을 요청하는 시간 초과 간격을 초 단위로 설정합니다. 기본값은 0이며 이러한 메시지가 클라이언트로 전송되지 않음을 나타냅니다. 이 옵션은 프로토콜 버전 2에만 적용됩니다.

ClientAliveCountMax

기본값은 3입니다 ClientAliveInterval(아래 참조)가 15로 설정되어 ClientAliveCountMax있고 기본값을 그대로두면 약 45 초 후에 응답하지 않는 SSH 클라이언트의 연결이 끊어집니다. 이 옵션은 프로토콜 버전 2에만 적용됩니다.

클라이언트 옵션에 대해서는 다음의 설명을 참조하십시오 man ssh_config.

ServerAliveInterval

서버에서 데이터가 수신되지 않은 경우 서버에서 ssh응답을 요청하기 위해 암호화 된 채널을 통해 메시지를 보내는 시간 초과 간격 (초)을 설정 합니다. 기본값은 0이며 이러한 메시지가 서버로 전송되지 않음을 나타냅니다. 이 옵션은 프로토콜 버전 2에만 적용됩니다.

ServerAliveCountMax

기본값은 3입니다. 예를 들어, ServerAliveInterval15로 설정되어 ServerAliveCountMax있고 기본값으로 남아 있으면 서버가 응답하지 않으면 ssh약 45 초 후에 연결이 끊어 집니다 . 이 옵션은 프로토콜 버전 2에만 적용됩니다.

위를 기준으로 0은 비활성화되었음을 의미합니다. 따라서 파이프 오류가 발생 하지 않도록이 값을 충분히 높게 설정해야 합니다.


답변

Barthelemy의 답변은 훌륭하지만 실제로 문제의 근원에 도달하지는 않습니다. 컴퓨터를 일시 중단하고 컴퓨터를 부팅 할 때 SSH 세션이 계속 활성화되기를 원합니다.

연결을 그대로 유지하는 ssh에는 그러한 구성이 없습니다. SSH는 TCP를 사용하므로 시작하려면 3 방향 핸드 셰이크가 필요하며 유휴 시간이 지난 후에도 계속 유지됩니다. 종료 / 최대 절전 모드에서 모든 TCP 연결은 FIN으로 닫힙니다. 그것을 극복 할 방법이 없습니다.

더러운 해결 방법은 VPS 또는 화면이있는 다른 온라인 상자를 사용하여 연결을 유지할 수 있습니다. 내 조언은 보안상의 이유로 그렇게하지 않습니다.


답변

일단 수신 된 패킷에 대한 ACK 전송을 중지하면 SSH 연결 (TCP)이 활성 상태로 유지된다고 보장 할 수 없으므로 개인적으로 http://www.harding.motd.ca/autossh/ 를 사용 하여 모든 SSH 연결을 다시 시작합니다. 내가 중단을 멈추자 마자

GNU Screen은 서버 측에서 사용되기 때문에 다시 연결하면 이전 위치로 이동합니다.

추가 포트에서 수신 대기하여 연결이 여전히 활성 상태인지 지속적으로 확인할 수는 있지만 개인적으로 사용하지 않도록 설정하고 SSH 자체 ServerAliveInterval/ 에 의존하는 것으로 충분 ServerAliveCountMax합니다.

또 다른 옵션은 http://mosh.mit.edu/ 입니다. UDP는 UDP를 사용하며 장기적인 연결 부족으로부터 완벽하게 복구합니다.


답변

nohupSSH 연결에 관계없이 명령을 실행하려면 명령을 실행할 수도 있습니다 .

예 :

$ nohup tar -xzf some_huge.tar.gz &

&IS, 내가 필요하지 생각하지만, 다른 물건을 할 수 있도록 백그라운드에서 프로세스를 실행하게하기 때문에 편리합니다.

나는 항상 시간이 걸리는 프로세스에 nohup을 사용하므로 어떤 이유로 든 연결이 끊어지면 다시 시작할 필요가 없습니다. 정전 (호스트가 아닌 원격 위치에서), 네트워크 중단 등 무엇이든.


답변

장기 실행 세션을 화면에 넣습니다. 자세한 내용은 screen -h를 참조하십시오.

그렇게하면 ssh를 사용하여 컴퓨터에 다시 연결하고 화면 세션에 다시 연결할 수 있습니다


답변