아키텍처 Architecture/Cloud Architecture

SSH gateway를 통한 private subnet 접속 (jump host)

섭코딩 2023. 1. 31. 23:10

* 상황 요약

 - AWS에서 백엔드 서버를 인터넷이 안되는 private subnet에 구성.

 - 로컬 PC에서 private subnet 접속이 안되기 때문에, 

   public subnet 영역에 있는 Bastion server를 통해  Backend server에 SSH 접속하려는 상황.

 

 

 

 

* 일반적인 해결 방법

- Windows의 경우 mobaxterm의 jump host 기능을 이용 (무료 버전도 가능)

- Mac OS의 경우 mobaxterm이 안되기 때문에 ssh gateway(jump host) 기능을 제공하는 다른 터미널 설치 후 이용

 

  →  그런데 Mac OS에서 별도 프로그램 설치 없이 평소에 사용하는 iTerm을 통해 접속해보고 싶었다.

 

 

* 일반 터미널을 통한 SSH gateway(jump host) 방식

 - 최초에 시도한 방법 : Bastion server에 ssh 접속 후, ssh 명령어를 통해 Backend server에 접속

                                   →  인증서 파일을 Bastion server에 업로드 해야한다 (하면 되는데, 보안상 좋지 않아 보임)

 

 - 해결한 방법 : 

1단계 > 터미널을 통한 ssh 접속

1. iTerm의 Profile을 새로 만든다 

     1) Profiles > Open Profiles > Edit Profiles 를 한다

     2) 좌측 하단의 + 버튼을 눌러 새로운 Profile을 추가한다

     3) Name 을 수정하고, Command 부분을 Login Shell 에서 Command로 변경하고 아래와 같은 형태로 명령어를 입력한다

// 양식
ssh -i "/<<pem파일 경로>>/<<pem파일명>>" <<계정 이름>>@<<publicIP>>

// 예시
ssh -i "/Users/jackpark/Desktop/MyKeyPair.pem" ubuntu@123.456.789.123

 

2. Profiles에서 방금 신규 생성한 Profile을 선택하고 새로운 터미널을 실행하면 접속 완료

 

2단계 > ssh gateway를 통한 proxy 접속 (bastion server를 통해 private subnet 영역의 서버 접속)

 

1. iTerm의 Profile을 새로 만든다 

     1) Profiles > Open Profiles > Edit Profiles 를 한다

     2) 좌측 하단의 + 버튼을 눌러 새로운 Profile을 추가한다

     3) Name 을 수정하고, Command 부분을 Login Shell 에서 Command로 변경하고 아래와 같은 형태로 명령어를 입력한다

// 양식
ssh -i "<<pem파일경로>>/<<pem파일명>>" -o "ProxyCommand ssh -W %h:%p -i "<<pem파일경로>>/<<pem파일명>>"  <<bastion계정명>>@<<bastion public IP>>" <<backend(최종목적지)계정명>>@<<backend(최종목적지)private IP>>

// 예시
ssh -i "/Users/jackpark/Desktop/MyKeyPair.pem" -o "ProxyCommand ssh -W %h:%p -i "/Users/jackpark/Desktop/MyKeyPair.pem"  ubuntu@123.456.789.123" ubuntu@10.0.10.85

 

2. Profiles에서 방금 신규 생성한 Profile을 선택하고 새로운 터미널을 실행하면 접속 완료

 

 


* 추가내용

맥OS, iTerm을 사용했지만, ssh 명령어는 Windows, putty 등

ssh가 가능한 다양한 OS, Terminal에서 모두 활용 가능하다.

 

*사용한 ssh 옵션

-i : identifying file 옵션 - 로컬PC의 pem 파일을 이용하기 위해 사용

-o : 사용자 정의 옵션 - ProxyCommand를 이용하기위해 사용

 

** 참고자료 

ssh 명령어의 순서를 바꿔도 접속이 가능해보인다 - 

https://stackoverflow.com/questions/19161960/connect-with-ssh-through-a-proxy

 

Connect with SSH through a proxy

I have no real idea what I'm doing here so please bear that in mind if you can help me! I am trying to connect to my virtual server through a proxy but I can't connect, it just hangs. I'm assuming...

stackoverflow.com

 

반응형