OS/Linux

[Linux] SSH timeout Configuration

Background

  • Terraform으로 provisioner를 사용하는 중 계속해서 SSH timeout이 발생
    -> "lost connection"의 에러가 발생했다.
  • 해결은 다른 방법이였지만, SSH timeout문제가 발생할 수 있어서 정리해 두는게 좋겠다.


SSH timeout?

SSH timeout을 설정하지 않은 초기값은 ssh 연결시, 연결 종료 전까지 계속 유지되게 설정되어있다. 이는 보안상으로 위험할 수 있기 때문에 일정 시간 후에 자동으로 ssh 연결이 끄늫어지도록 설정해두는게 보안상 유리하다.

# /etc/ssh/sshd_config

#ClientAliveInterval 0
#ClientAliveCountMax 3
  • ClientAliveInterval 0 : Client가 살아있는지 확인하는 간격 (기본값 0은 계속 연결을 의미)
  • ClientAliveCountMax 3 : Client가 응답이 없어도 접속 유지하는 횟수


Configure

  • CentOS 8 환경에서 진행
  • Ubuntu 환경은 따로 표기

Method 1 : sshd_config

  • root 권한이 필요

sshd_config 파일을 열고

# vi /etc/ssh/sshd_config

다음 주석처리된 값들을 찾아서 주석해제 후 원하는 값으로 변경한다.

- #ClientAliveInterval 0
+ ClientAliveInterval 100 # 10분을 의미, 초단위는 그냥 숫자로 표현
- #ClientAliveCountMax 3
+ ClientAliveCountMax 3

sshd 데몬을 재실행한다.

  • RHEL/CentOS
    # systemctl restart sshd
  • Ubuntu
    # service sshd restart

설정 내용 확인

# cat /etc/ssh/sshd_config | grep Client
ClientAliveInterval 100
ClientAliveCountMax 3

Method 2 : profile를 통해

/etc/profile 혹은 home directory의 .profile을 에디터로 연다.

  • RHEL/CentOS
    $ vi ~/.bash_profile
  • Ubuntu
    $ vi ~/.profile
    $ sudo vi /etc/profile

다음을 추가한다.

export TMOUT=300

변경된 profile을 적용한다.

  • RHEL/CentOS
    $ source ~/.bash_profile
  • Ubuntu
    $ source ~/.profile
    $ source /etc/profile


Calculate Timeout

timeout 시간 계산법은 다음과 같다.

timeout interval = ClientAliveInterval * ClientAliveCountMax

위의 예시대로 계산하면 300초 동안 유지되는 ssh timeout이 설정되었다.


Ref