리눅스 세션 타임아웃으로 끊기는 것 방지하기 (TMOUT, SSH keepalive)
리눅스 서버에서 로그를 확인하거나 셸 작업을 하려고 세션을 맺어 놓았는데, 잠시 자리를 비운 사이 세션이 끊어져 다시 로그인해야 했던 경험이 있는 사람이 많을 것이다. 이 글에서는 이런 리눅스 세션 타임아웃 문제를 해결하는 방법을 정리해 보았다.
원인은 크게 두 가지다. 셸이 일정 시간 입력이 없으면 스스로 종료되는 경우와, SSH 연결 자체가 중간 장비에 의해 끊기는 경우다. 각각 해결 방법이 다르니 하나씩 보자. SSH 접속 자체가 안 되는 상황이라면 SSH 접속 안될 때 확인할 것 글이 더 도움이 된다.

리눅스 세션 타임아웃 원인: TMOUT 변수
보안 정책이 적용된 서버에는 보통 TMOUT이라는 환경 변수가 설정되어 있다. 이 값(초 단위)만큼 아무 입력이 없으면 셸이 자동으로 로그아웃시킨다. 지금 내 세션에 설정된 값은 아래 명령어로 확인할 수 있다. 600이 나온다면 10분 동안 입력이 없을 때 끊긴다는 뜻이다.
echo $TMOUTexport TMOUT=0 으로 리눅스 세션 타임아웃 해제하기
그런 경험이 있다면 서버에 로그인한 다음 아래 명령어를 쳐 보자. TMOUT을 0으로 바꾸면 자동 로그아웃이 꺼지기 때문에, 어디 가서 시간을 꽤 오래 보내고 오더라도 세션이 유지되어 있을 것이다.
export TMOUT=0
다만 이 방법은 지금 접속한 세션에만 적용된다. 다시 로그인하면 원래 값으로 돌아간다. 또 관리자가 TMOUT을 readonly로 지정해 두었다면 readonly variable 오류가 나면서 바꿀 수 없다. 이 경우는 보안 정책으로 강제한 것이니 관리자에게 문의하자.
리눅스 세션 타임아웃 해제를 영구 적용하기
매번 입력하기 번거롭다면 내 계정의 ~/.bashrc 파일 맨 아래에 같은 줄을 추가해 두면 로그인할 때마다 자동으로 적용된다. 파일 편집이 익숙하지 않다면 vi 편집기 사용법을 참고하자.
echo 'export TMOUT=0' >> ~/.bashrc
회사 서버라면 TMOUT이 보안 점검 항목인 경우가 많다. 개인 서버가 아니라면 정책을 해치지 않는 선에서만 쓰는 것이 좋다.
SSH 연결 자체가 끊기는 리눅스 세션 타임아웃
TMOUT이 0인데도 일정 시간이 지나면 끊긴다면, 방화벽이나 공유기 같은 중간 장비가 오랫동안 데이터가 오가지 않는 연결을 정리해 버리는 경우다. 이때는 주기적으로 신호(keepalive)를 보내 연결이 살아 있다고 알려 주면 된다. 내 PC 쪽에서 설정하려면 ~/.ssh/config에 아래 내용을 넣는다. 60초마다 신호를 보낸다는 뜻이다.
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
서버 쪽에서 설정하려면 /etc/ssh/sshd_config에 ClientAliveInterval 60과 ClientAliveCountMax 3을 넣고 SSH 서비스를 재시작하면 된다. sshd_config 수정 방법은 SSH 포트 변경 방법 글에서도 다뤘다. 각 옵션의 의미는 OpenSSH ssh_config 문서에서 확인할 수 있다.
작업을 끊기지 않게 유지하는 tmux
세션 만들기, 다시 붙기, 화면 분할 단축키까지 자세한 사용법은 tmux 사용법에 따로 정리했다.
오래 걸리는 작업을 돌려 놓고 자리를 비워야 한다면 tmux를 쓰는 것이 가장 확실하다. tmux 안에서 실행한 작업은 SSH가 끊겨도 서버에서 계속 돌고, 다시 접속해서 tmux attach로 그대로 이어 볼 수 있다.
tmux new -s worktmux attach -t work마무리
정리하면 리눅스 세션 타임아웃은 셸의 TMOUT 때문인지, SSH 연결이 중간에서 끊기는 것인지부터 구분하면 된다. TMOUT은 export TMOUT=0, 연결 끊김은 keepalive 설정, 오래 걸리는 작업은 tmux로 해결하자.
첫 댓글을 남겨보세요