반응형

외부에 공개되어 있지 않은 private subnet에 있는 자원에 접근하기 위해서는
Bastion host를 통해 Tunneling을 해야 하는데
Tunneling은 일반적인 ssh 접속을 통해 이루어지므로
네트워크 상태나 프로세스 비정상 종료 등으로 인해 Tunneling이 중단될 수 있습니다.

이 경우 사용 중이던 private subnet 접근도 중지되게 되는데,
Tunneling 종료로 인한 private subnet 접속 해제를 막기 위해
autossh 라는 프로그램이 있습니다.
※ autossh 웹사이트: https://www.harding.motd.ca/autossh/

 

autossh

autossh - Automatically restart SSH sessions and tunnels Update: Version 1.4g most notably addresses a bug that could see an alarm signal occur without a handler, causing autossh to exit inappropriately. Previous update: Version 1.4f incorporates a number

www.harding.motd.ca

웹사이트에 따르면 autossh는
ssh 접속하고 모니터 하며
해당 프로세스가 종료되거나 네트워크가 중단되면 ssh 접속을 재시작하는 방식으로 접속을 유지합니다.

autossh의 이러한 특성을 이용하면
Tunneling(Port forwarding)을 생성, 유지하는 데에도 적용할 수 있습니다.
※ Autossh Port Fowarding: https://medium.com/@gary4est/autossh-port-forwarding-23088d948787

 

Autossh Port Forwarding

How to setup ssh port forwarding with autossh and systemd or launchtl

medium.com

autossh를 통해 Tunneling 생성, 유지 방법을 정리하였습니다.

autossh 설치 (macOS 기준)

brew install autossh

autossh 실행

autossh -f -N -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \
 -L ${Local포트}:${원격인스턴스}:${원격포트} -i "${키페어파일}" ${BASTION_USER}@${BASTION_HOST}

 autossh 옵션

-f 백그라운드에서 실행
-N 원격 명령어를 실행하지 않음. 주로 포트 포워딩만 하는 경우 적용
-M 모니터 포트. 환경 설정에서 설정한 값을 override 함. 0으로 설정할 경우 off
-o ssh 접속 옵션
-L 지정한 로컬 포트를 이용하여 원격 인스턴스에 접속
-i ssh 접속 키 페어 파일 경로

예) 로컬의 9022 포트를 통해 123.123.123.123에 ssh 접속을 해야 하는 경우 터널링

autossh -f -N -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \
 -L 9022:123.123.123.123:22 -i "/key-pair.pem" \
 bastion-user@ec2-XXX-XXX-XXX-XXX.ap-northeast-2.compute.amazonaws.com

원격 리소스 접근

autossh 설치 후 위와 같이 실행하면 Tunneling이 생성, 유지되며
이후에는 locahost의 포트를 통해 private subnet의 자원에 접근할 수 있습니다.

ssh -i "${키페어파일}" ${원격_USER}@localhost -p ${로컬포트}

예) 원격 USER(ec2-user)가 로컬 9022 포트 통해 접속

ssh -i "/key-pair.pem" ec2-user@localhost -p 9222

 

반응형

+ Recent posts