SSH에서 tcp-keepalive는 어떻게 작동하나요?

SSH에서 tcp-keepalive는 어떻게 작동하나요?

"하트비트"를 수행하기 위해 SSH 연결을 사용하는 쉘 스크립트를 작성하려고 합니다. 특정 시간 초과 후(연결이 끊어진 후) 클라이언트 및 서버 측 연결을 종료하고 싶습니다.

지금까지 내가 찾은 것 :

  • TCP 연결 유지예/아니요SSH그리고SSHD
  • 살아있는 최대 클라이언트 수~을 위한SSHD
  • 클라이언트 활동 간격~을 위한SSHD
  • 서버 최대 활동 수~을 위한SSH
  • 서버 활동 간격~을 위한SSH

"ClientAliveCountMax"를 변경하려면 각 대상 컴퓨터에서 sshd_config를 수정해야 했습니다(이 옵션은 기본적으로 비활성화되어 있습니다).

그래서 내 질문은 - "TCPKeepAlive"를 사용하여 내 목적을 달성할 수도 있습니까(소스/대상 컴퓨터에서 다른 것을 변경하지 않고)?

대상 OS는 SLES11 SP2이지만 그것과 관련이 없다고 생각합니다.

답변1

이를 위해 ServerAlive 설정을 사용할 수 있습니다. 서버에서 구성할 필요가 없으며 원하는 경우 명령줄에서 설정할 수 있습니다.

ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1 $HOST

이렇게 하면 5초마다 SSH Keepalive 메시지가 전송됩니다. 또 다른 Keepalive 메시지를 보내야 하는데 마지막 Keepalive에 대한 응답이 수신되지 않으면 연결이 종료됩니다.

ServerAliveInterval와 의 주요 차이점은 TCPKeepAlive작동하는 계층입니다.

  • TCPKeepAliveTCP 계층에서 실행됩니다. 빈 TCP ACK 패킷을 보냅니다. 이러한 패킷을 무시하도록 방화벽을 구성할 수 있으므로 유휴 연결을 삭제하는 방화벽을 통과하면 이러한 패킷이 연결을 활성 상태로 유지하지 못할 수 있습니다.
  • ServerAliveIntervalSSH 계층에서 실행됩니다. 실제로 SSH를 통해 데이터를 전송하므로 TCP 패킷에는 암호화된 데이터가 포함되어 있고 방화벽은 그것이 Keepalive 패킷인지 합법적인 패킷인지 알 수 없으므로 이것이 더 잘 작동합니다.

답변2

TCPKeepAlive옵션은 실제로 ClientAlive 또는 ServerAlive와 같은 옵션과 연결을 유지하는 매우 다른 방법입니다.

둘 다 누르세요BSD SSH 매뉴얼 페이지, 우리는 다음을 읽을 수 있습니다:

클라이언트 활동 메시지는 스푸핑될 수 없도록 암호화된 채널을 통해 전송됩니다. 활성화된 TCP 연결 유지 옵션 TCPKeepAlive은 스푸핑 가능합니다. 클라이언트 측 활성 메커니즘은 클라이언트나 서버가 연결이 비활성화되는 시기를 알아야 할 때 유용합니다.

TCPKeepAlive시스템이 상대방에게 TCP keepalive 메시지를 보내야 하는지 여부를 결정합니다 . 기본 옵션은 항상 활성화되어 있습니다.

사용 중이라면 ClientAliveInterval비활성화할 수 있습니다 TCPKeepAlive. 이 옵션은 암호화된 채널을 통해 메시지를 보내 클라이언트의 응답을 요청하고(기본값은 0이므로 클라이언트에 메시지가 전송되지 않음) ClientAliveCountMaxsshd가 세션을 종료하여 클라이언트 연결을 끊기 전에 클라이언트의 활성 메시지 수를 설정합니다. .

관련 정보