[프록시 점프] Bastion Host를 거쳐 private 서버로 한 번에 접근하기

반응형

Bastion Host란, 외부에서 내부 네트워크로 들어가는 유일한 입구 역할을 한다.

모든 외부 접속은 이 베스천 호스트를 통해서만 이루어진다.

 

현재 상황

지금진행 중인 프로젝트는 Public Subnet에 있는 Bastion EC2를 거쳐서 Private Subnet에 있는 Ody EC2에 접근할 수 있다.

우리 서버는 Ody EC2에서 실행되고 있으므로 해당 EC2로의 접근이 필요했고

이 Bastion EC2는 모든 프로젝트 팀이 접근가능한 EC2다.

원래라면 Public Subnet에 EC2에 Private Subnet EC2의 Pem키를 scp로 전송해 해당 Pem키로 private Subnet EC2로 접근했겠지만

Bastion EC2에 우리 프로젝트 서버의 Pem 키를 넣으면 모든 프로젝트 팀이 이를 사용할 위험이 있다.. (믿기야 하지만 ㅎㅎ)

 

따라서 로컬에 가지고 있는 Pem 키들로 Bastion EC2를 경유해 Ody EC2로 접근하고자 프록시 점프를 사용하게 되었다.


프록시 점프 (Proxy Jump)

프록시 점프는 SSH 연결을 통해 중간 서버를 거쳐 최종 목적지 서버에 접근하는 기술이다.

어떻게 적용하는지 쉽게 알아보자.

 

~/.ssh경로에서 config 파일 작성 

아래 처럼 ~/ 경로에 있는 .ssh 폴더에서 config 파일을 작성해주자.

Host bastion-ec2
HostName bastion-ec2-ip-주소
User ubuntu
Port 22
IdentityFile ~/.ssh/xxx.pem

Host ody-ec2
HostName ody-ec2-ip-주소
User ubuntu
Port 22
IdentityFile ~/.ssh/xxx.pem
ServerAliveInterval 300
ProxyCommand ssh A -W %h:%p

 

config에 사용할 수 있는 옵션들

필자는 위와 같이 옵션을 사용해 작성했는데 사용한 옵션과 추가적인 옵션들을 알아보면 다음과 같다.

옵션 설명
Host 연결할 호스트의 별칭을 정의
HostName 실제 연결할 서버의 IP 주소나 도메인 이름을 지정
User 연결 시 사용할 사용자 이름을 지정 (ec2는 whoami의 유저명)
Port SSH 연결에 사용할 포트 번호를 지정 (기본값 22)
IdentityFile 인증에 사용할 SSH 키 파일의 경로를 지정
ServerAliveInterval 설정한 초 마다 시그널을 보내서 통신이 자동으로 끊기는 것을 방지
ProxyCommand 프록시 명령을 지정
-W : SSH의 옵션으로, 표준 입력과 출력을 원격 호스트의 포트로 전달
%h : 최종 목적지 Host를 의미
%p : 최종 목적지 호스트이 접속 포트를 의미
ProxyJump 프록시 점프에 사용할 중간 서버를 지정

 

실행

위 설정들을 마쳤다면 다음과 같이 간단한 명령어를 통해 원하는 Host 서버로 접속이 가능하다.

// bastion-ec2로 접속
ssh bastion-ec2

// ody-ec2로 접속
ssh ody-ec2

이제 명령어 한 번으로 private EC2로 접근 가능하게 되었다 👍🏻