본문 바로가기
Old Posts/Linux

[Linux] SSH 연결 최적화 - ControlMaster, ControlPath, ControlPersist 설정

by A6K 2023. 1. 4.

클러스터를 운영하는 경우 운영 서버로 ssh 접속을 해야하는 경우가 있다. 이 때, 환경설정에 따라 아이디, 비밀번호 이외에 추가로 OTP 등의 인증을 요구하는 경우가 있다. 하루에 한번 업무차 접속하는 경우라면 상관없지만 빈번하게 새로운 ssh 연결을 생성해야하는 경우라면 매번 해야하는 ID, Password, OTP 등의 절차가 매우 번거로울 수 있다.

이 때, ControlMaster, ControlPath, ControlPersist 설정을 해두면 번거로움을 어느정도 해소할 수 있다.

ssh 설정

~/.ssh/config 파일을 열고 다음 설정을 추가하자.

Host server
HostName my.host.com
User myUserId
ControlMaster auto
ControlPath ~/.ssh/%r@%h-%p
ControlPersist 12h

그리고 접속을 하면 최초 연결시에만 OTP 인증을 하고, 이후 연결에는 요구하지 않게 된다. 게다가 연결이 생성되는 속도도 매우 빠르다.

ControlMaster

이 설정의 의미는 이미 생성된 ssh 커넥션을 이후 연결 요청과 공유하는 것이다. 이미 서버에 로그인되어 있는 ssh 커넥션이 있을 때, 동일한 서버에 동일한 아이디로 다시 로그인하는 경우 새로운 커넥션을 생성하지 않고 기존 커넥션을 재사용하게 된다. 커넥션 재사용으로 빠른 연결 생성(사실은 생성이 아닌 공유)과 OTP 인증 등을 한번만 할 수 있게 된다.

최초 생성된 하나의 ssh 연결을 마스터(Master)로 두고 이후 연결 요청은 마스터를 통해서 연결을 공유하게 된다. 이를 위해서 마스터 ssh 프로세스는 연결 요청을 리슨(listen)하고 있어야 한다. 마스터가 리슨하고 있는 소켓이 바로 ControlPath에 써넣은 정보를 이용해 생성된다.

ControlMaster 설정의 기본값은 no다. 연결 공유를 사용하지 않고 매번 새로운 연결을 생성하라는 의미다. 이 설정을 yes로 바꾸면 마슨터의 연결을 이후 생성 요청들이 공유해서 사용한다. ControlMaster를 auto로 사용하면 마스터 연결이 없는 경우 마스터를 만들고, 마스터가 있는 경우에는 그 연결을 사용한다. 

ControlPath

ContrlPath 옵션은 마스터 ssh 프로세스가 리슨할 공유 소켓이 생성될 경로 정보다. 대부분 ~/.ssh 디렉토리 아래에 만들어 사용하게 된다. 

ControlPath를 구성하는 포매팅 문자로는 %h, %p, %r 같은게 있다. %h는 호스트(host) 이름, %p는 포트(port), %r은 리모트 유저 네임(혹은 %C)을 의미한다. 즉, control-%h-%p-%r로 ControlPath가 설정되어 있을 때, naver.com 서버의 99번 포트로 user1이 접속하는 경우라면 공유 소켓은 control-naver.com-99-user1 이라는 이름을 생성된다.

ControlPersist

ControlPersist 옵션은 최초 연결이 종료된 이후 마스터 커넥션이 백그라운드에서 얼마나 오래 유지될 것인지를 의미한다. 기본은 no로 설정되어 있다. no의 경우 마스터 커넥션이 백그라운드에서 남아있지 않도록 한다. 따라서 최초 커넥션이 종료되면 같이 종료된다.

yes 혹은 0으로 설정되는 경우 마스터 프로세스의 연결은 백그라운드에서 영원히 살아있게 된다. 물론 kill 이나 ssh -O exit 명령을 이용해 닫을 수 있다.

그 밖에 특정 시간으로 설정할 수 있다. 예를 들어 12h 는 12시간, 1w는 1주, 2d는 2일, 1m는 1분, 100s는 100초 같이 설정 할 수 있다.

댓글