Backend/기타

Autossh로 SSH 연결 유지하기

sangwonYoon 2023. 7. 17. 22:40

이전 글에서 ssh 포트 포워딩을 통해 웹 서버와 모델 추론 서버간의 연결을 구축한 내용을 작성했었다.

 

SSH 포트 포워딩으로 컨테이너에서 실행되는 서버를 외부와 연결하기

현재 진행중인 법률 상담 챗봇 프로젝트에서 서버를 구성하는데 가장 큰 문제는 제공받은 V100 서버가 컨테이너에서 실행된다는 점이었다. ssh 연결을 담당하는 22번 포트만 외부에 열려있었기 있

sangwonyoon.tistory.com

그런데 만약 이 상황에서 V100 서버와 router가 위치한 서버간의 ssh 연결이 끊어진다면, 아무런 알림도 받지 못한 채 서비스가 먹통이 될 것이다. 따라서 ssh 연결이 끊어지면 자동으로 다시 연결하는 기능이 필요했고, 여러 방법을 시도한 결과 Autossh를 사용하여 문제를 해결할 수 있었다.

 

Autossh

Autossh는 ssh 연결이 끊어질 경우 자동으로 재연결을 시도하고, ssh 연결을 모니터링할 수 있는 프로그램이다.

 

Autossh 설치

아래는 Linux 운영체제에서 Autossh를 설치하는 명령어이다.

sudo apt-get install autossh

 

ssh 포트 포워딩(ssh 터널링) 활성화

먼저 ~/.ssh/config 파일을 아래와 같이 구성한다.

# Host <SSH 연결에 사용할 호스트 이름>
#   HostName <V100 서버의 IP 주소>
#   IdentityFile <SSH 연결 시 사용할 키의 위치>
#   User <유저의 이름>
#   Port <연결할 서버의 포트 번호>

Host 118.67.143.21
  HostName 118.67.143.21
  IdentityFile /Users/sangwon/Downloads/v100_key
  User root
  Port 2240

 

그 다음, 아래 명령어를 통해 ssh 포트 포워딩을 활성화한다.

# ssh -L <로컬에서 사용할 포트>:<최종적으로 접근할 곳> <호스트 이름>
ssh -L 8000:127.0.0.1:8000 118.67.143.21

 

Autossh로 ssh 연결 관리

아래 명령어를 통해 Autossh를 활성화한다.

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -N -f -L 8000:127.0.0.1:8000 118.67.143.21
  • -M 0 옵션은 ssh 연결이 끊어졌는지 감지하기 위한 모니터링을 위한 포트를 지정하는 옵션으로, built-in 모니터링 포트를 사용하라는 의미이다.
  • -N 옵션은 “No command”라는 의미로, ssh를 사용하여 원격 서버에 접속하지 않고, ssh 터널만 만드는 역할을 한다.
  • -f 옵션은 Autossh를 백그라운드에서 실행하라는 의미이다.
  • -o "ServerAliveInterval 30" 옵션은 ssh server에게 keepalive 패킷을 30초마다 보내라는 의미이다.
  • -o "ServerAliveCountMax 3" 옵션은 ssh server에게 보낸 keepalive 패킷 3개가 연속으로 실패할 경우, ssh 연결을 다시 시도한다.

 

여기서 keepalive 패킷이란 무엇일까? ssh client가 ssh server로 요청을 일정 시간동안 보내지 않으면, ssh server가 ssh 연결을 끊는다. 이를 방지하기 위해 ssh client가 일정 시간마다 ssh server로 keepalive 패킷을 보냄으로써 ssh 연결을 유지하는 것이다.

 

이렇게 설정을 마치면, ssh 연결이 끊어지더라도, Autossh가 자동으로 연결이 끊어진 것을 감지하고, 재연결을 시도한다.

 

(잘못된 내용을 지적해주시거나 내용에 관한 피드백은 언제나 환영입니다!)