최신글

macOS끼리 SSH 연결이 자꾸 끊길 때 keepalive 설정하기

반응형

요약

이 글은 macOS 장비끼리 SSH로 접속할 때 세션이 간헐적으로 끊기는 문제를 다룹니다. 맥북프로에서 맥북미니로 원격 접속하던 중 5초 정도 입력이 없으면 연결이 끊기던 상황을 기준으로, SSH keepalive 설정으로 세션을 안정화하는 방법을 정리합니다.

 

이 글에서 알 수 있는 것

  • macOS 간 SSH 접속이 짧은 idle timeout 때문에 끊길 수 있는 이유
  • ServerAliveInterval과 ServerAliveCountMax로 SSH keepalive를 설정하는 방법
  • 클라이언트의 ~/.ssh/config에 keepalive 설정을 추가하는 방법
  • 서버의 /etc/ssh/sshd_config 설정 후 Remote Login을 재시작하는 방법

 

주요 키워드

  • macOS SSH 연결 끊김
  • SSH idle timeout
  • SSH keepalive
  • ServerAliveInterval
  • ServerAliveCountMax

 

배경

맥북프로에서 맥북미니로 ssh 원격접속을 하고 있는데, 연결한 지 5초마다 세션이 끊기고 다시 연결되었습니다.

 

원인

원인은 ssh idle timeout이었습니다. ssh 세션에서 일정 시간 동안 패킷이 오가지 않으면 idle상태가 됩니다. 제 환경에서는 그 임계값이 굉장히 짧아서 5초만 입력이 없어도 끊겼습니다.

 

해결 방법은 ssh가 주기적으로 keepalive 패킷을 보내게 만드는 것입니다. ServerAliveInterval로 패킷 전송 주기를 정하고, ServerAliveCountMax로 응답이 없을 때 몇 번까지 재시도할지 정합니다.

 

client 설정

저는 client쪽 ~/.ssh/config에 아래처럼 설정했습니다. 300초마다 keepalive 패킷을 보내고, 10번까지 응답이 없으면 그때 끊는다는 뜻입니다.

$ vi ~/.ssh/config
Host {hostname}
  HostName {ip 또는 hostname}
  ServerAliveInterval 300
  ServerAliveCountMax 10

 

server 설정

server쪽도 동일하게 맞춰줘야 합니다. /etc/ssh/sshd_config에 client와 같은 값으로 설정하고 ssh를 재시작했더니 그제서야 연결이 안정적으로 유지됐습니다.

$ vi /etc/ssh/sshd_config
ServerAliveInterval 300
ServerAliveCountMax 10

 

서버에서는 sshd_config설정후 sshd를 재실행해야 합니다. 저는 맥 설정에서 sshd를 off/on하셔 재실행했습니다.
- System Settings → General → Sharing → Remote Login

 

참고자료

반응형