KeepAlive 설정

KeepAlive는 클라이언트와 서버 사이의 연결 상태를 유지하기 위한 설정이다. SSH 세션에서 클라이언트가 오랫동안 아무런 데이터를 전송하지 않을 때도 연결이 유지되도록 설정할 수 있으며, 기본적으로 SSH는 KeepAlive 패킷을 주기적으로 전송하여 연결이 여전히 활성화 상태인지 확인한다.

KeepAlive의 역할

KeepAlive 패킷은 네트워크 연결이 끊겼는지 확인하는 데 사용된다. 네트워크가 끊겼거나, 방화벽에서 비활성화된 연결을 종료하려는 경우, KeepAlive 패킷은 SSH 세션이 여전히 유효한지 여부를 판단하는 데 중요한 역할을 한다. 이 설정이 없으면 장시간의 유휴 세션 동안 연결이 끊겼는지 감지할 수 없다.

KeepAlive 설정 방법

/etc/ssh/sshd_config 파일에서 ClientAliveIntervalClientAliveCountMax 설정을 통해 KeepAlive 동작을 제어할 수 있다.

ClientAliveInterval 60
ClientAliveCountMax 3

위의 설정은 60초마다 클라이언트로 KeepAlive 패킷을 보내며, 클라이언트가 3번의 KeepAlive 패킷에 응답하지 않으면 연결이 끊깁니다.

TCPKeepAlive 설정

TCPKeepAlive는 SSH 프로토콜 자체가 아닌 TCP 레벨에서 연결을 유지하는 데 사용되는 옵션이다. 기본적으로 활성화되어 있으며, 서버와 클라이언트 간의 물리적 연결 상태를 확인하기 위한 목적이다. TCPKeepAlive는 운영 체제의 TCP 스택에 의존하여 연결 상태를 확인한다.

TCPKeepAlive의 역할

TCPKeepAlive는 네트워크 장비나 방화벽이 오랫동안 유휴 상태로 남아있는 TCP 연결을 끊지 않도록 방지하는 데 사용된다. 일반적으로 방화벽은 특정 시간 동안 트래픽이 없는 연결을 자동으로 종료하는데, TCPKeepAlive 설정을 통해 이를 방지할 수 있다.

TCPKeepAlive 설정 방법

TCPKeepAlive는 클라이언트와 서버 양쪽에서 설정할 수 있으며, /etc/ssh/sshd_config 파일에 다음과 같이 설정할 수 있다.

TCPKeepAlive yes

위와 같이 설정하면 TCPKeepAlive 패킷이 주기적으로 전송되어 TCP 레벨에서 연결 상태를 확인하게 된다. KeepAlive와 달리 TCPKeepAlive는 네트워크 장비에서의 연결 상태를 확인하는 데 중점을 두며, TCP 스택 자체에서 이루어지므로 더 낮은 레벨의 연결 상태를 모니터링한다.

KeepAlive와 TCPKeepAlive는 둘 다 설정 가능하며, 특정 네트워크 환경에서 하나의 설정이 더 효과적일 수 있다.

TCPKeepAlive와 KeepAlive의 차이점

KeepAlive와 TCPKeepAlive는 연결 상태를 유지하는 방식이 다르다. KeepAlive는 SSH 프로토콜 레벨에서 작동하며, SSH 서버와 클라이언트 사이의 상위 레벨에서 연결 상태를 확인한다. 반면, TCPKeepAlive는 TCP 레벨에서 작동하며, 운영 체제의 TCP 스택에서 네트워크 연결 상태를 모니터링한다.

차이점 요약

KeepAlive 및 TCPKeepAlive 설정의 상호작용

두 설정을 모두 활성화하면, SSH 세션에서 KeepAlive는 애플리케이션 레벨에서 클라이언트와 서버 간의 상호작용을 확인하며, TCPKeepAlive는 네트워크 레벨에서 물리적인 연결을 확인한다. 두 설정은 독립적이므로, 하나만 활성화할 수도 있고, 둘 다 활성화할 수도 있다. 이를 통해 특정 네트워크 환경에서 더 안정적인 연결 상태를 유지할 수 있다.

설정 예시

네트워크 환경에 따라, 두 설정을 동시에 사용하는 경우도 흔한다. 예를 들어, 다음과 같이 두 설정을 활성화할 수 있다.

ClientAliveInterval 60
ClientAliveCountMax 3
TCPKeepAlive yes

이 설정은 SSH 세션의 KeepAlive 패킷을 60초 간격으로 전송하며, 클라이언트가 3번 응답하지 않으면 연결을 종료한다. 동시에, TCPKeepAlive도 활성화되어 있으므로, TCP 레벨에서도 연결 상태를 모니터링한다.

KeepAlive 및 TCPKeepAlive 설정의 성능 영향

두 설정 모두 연결을 유지하는 데 중요한 역할을 하지만, 성능에 영향을 줄 수 있다. KeepAlive는 주기적으로 패킷을 전송하므로, 빈번한 네트워크 트래픽이 발생할 수 있다. 특히 많은 SSH 세션이 동시에 열려 있는 서버에서는 KeepAlive 패킷이 서버에 부하를 줄 수 있다.