저는 현재 대학교 졸업 작품으로 웹 개발 프로젝트를 만들고 있습니다. 개발을 완료한 후, 제가 다니고 있는 연구실 서버에 이 서비스를 배포하려고 합니다. 연구실 서버는 게이트 역할을 수행하는 Bastion 서버와 그 안에 제가 서비스를 배포할 서버로 구성되어 있습니다. 그렇다면.... 배포를 하기 위해 Bastion 서버를 거쳐 배포할 서버로 이동하는 방법을 알아야 합니다. 이때 사용되는 개념인 Proxy 서버와 ProxyJump에 대해 공부를 진행하였습니다.
본 게시물은 로컬 머신에서 목적지 서버로 접속할 때 사용하는 개념인 Proxy 서버에 대해 알아봅니다. 그리고 명령어를 통해 Proxy 서버를 접속하는 방법인 ProxyCommand, 마지막으로 ProxyJump 설정을 통해 간편하게 Proxy 서버를 경유해 목적지 서버를 접속하는 방법에 대해 알아보겠습니다.
Proxy 서버는 로컬 머신에서 목적지 서버로 접속하려 할 때, 그 사이에서 경유지 역할을 하는 서버를 의미합니다.
직접 로컬 머신에서 목적지 서버로 접속을 하면되는데 번거롭게 Proxy 서버를 경유하여 목적지 서버로 접속을 하는지 궁금하실 겁니다. Proxy 서버를 사용 하는 이유는 다음과 같습니다.
보안 강화
Proxy 서버는 외부에서 직접 내부로 접근하는 것을 차단하고, Proxy 서버를 통해서만 접근이 가능하도록 하여 보안을 강화할 수 있습니다. 예를 들어 특정 사용자나 IP 주소로만 목적지 서버로의 접속을 허용할 수 있습니다.
부하 분산
Proxy 서버는 부하 분산 장치로도 사용될 수 있습니다. 예를 들어 여러 서버로의 요청을 Proxy 서버에서 받아 적절히 분배함으로써 서버의 부하를 줄이고 성능을 최적화할 수 있습니다.
명령어를 통해 Proxy 서버를 경유해 목적지 서버로 접속할 수 있습니다. 이를 ProxyCommand라고 합니다.
형식은 다음과 같습니다.
ssh -J [Bastion Username]@[Bastion Address] [Target Username]@[Target Address]
-J 옵션: ProxyJump를 사용하겠다는 옵션
Bastion Username: 프록시 서버의 사용자명
Bastion Address: 프록시 서버의 호스트명 또는 IP 주소
Target Username: 목적지 서버의 사용자명
Target Address: 목적지 서버의 호스트명 또는 IP 주소
위와 같이 ssh 명령어(ProxyCommand)를 사용하여 ProxyJump를 할 수 있지만, ProxyJump 설정을 통해 보다 쉽게 접속이 가능합니다. 그 이유는 ProxyJump는 ProxyCommand을 래핑하고 있기 때문입니다.
그러면 ProxyJump 설정을 해보도록 하겠습니다.
형식
위치: ~/.ssh/config
Host [proxyjump server name]
HostName [proxyjump host name]
Port [port number]
IdentityFile [SSH key path]
User user [proxyjump user name]
Host [target server name]
HostName [target host name]
Port [port number]
User user [target user name]
IdentityFile [SSH key path]
ProxyJump [proxyjump server name]
예시
Host bastion
HostName bastion.example.com
Port XXXX
IdentityFile ~/~
User user
Host final
HostName final.example.com
IdentityFile ~/~
User user
ProxyJump bastion
위와 같이 설정을 하면 다음처럼 손쉽게 목적지 서버로 접속이 가능합니다.
ssh final
네 그럼 위의 내용을 바탕으로 실습을 진행해보겠습니다.
먼저 ProxyJump 설정 내용을 입력할 config 파일을 vim로 열어 줍니다.

다음으로 설정 내용을 입력해줍니다.
마지막으로 위 설정 내용을 저장한 후, ssh [target server hostname] 형식으로 접속을 합니다.

이번 시간에는 Proxy 서버의 역할과 개념, ProxyJump를 활용하는 방법에 대해 알아보았습니다. 본 게시물이 여러분들께 도움이 되었으면 좋겠습니다. 그리고 피드백 또한 환영입니다. 다음에는 "SSH ProxyJump를 활용한 GithubAction"이란 주제로 게시물을 작성할 예정입니다. 감사합니다.
잘 읽었습니다.
실습 예제와 개요도가 함께 있으면 더 좋은글이 될 것 같아요!