-
ssh 포트포워딩(터널링) 뚫기 (feat. 로컬에서 AWS VPC내 RDS 접속하기)🏢 업무 리서치 기록 2022. 12. 15.
SSH 란 무엇일까?
Secure Sell의 약자로 원격지에 있는 컴퓨터를 안전하게 제어하기 위한 프로토콜 또는 이 프로토콜을 사용하는 프로그램들을 의미한다.
사용자 인증부터 데이터 전송까지 모든 과정이 암호화되기 때문에 보안성이 매우 높다.
이전까지는 Telnet을 주로 사용했는데 이것을 대체하기 위한 수단으로 등장했다고 한다.
SSH Key 란?
SSH 서버에 접속할 때 비밀번호 대신 키를 제출하는 방식을 말한다.
비밀번호방식보다 높은 수준의 보안을 필요로 하거나 비밀번호 없이 자동으로 서버에 접속하고 싶을때 키 방식을 사용한다.
SSH key는 공개키와 비공개 키로 동작이 이루어진다.
공개키는 서버에 위치시키고, 비공개 키를 클라이언트가 가지고 있게 한다. 그리고 SSH 요청시에 클라이언트가 서버에 비공개키를 보내면 서버가 가지고있는 공개키와 비교하게 되는데 이 과정이 비밀번호를 입력하는 과정을 대신하는 것이다.
포트포워딩(=포트 매핑) 이란?
일반적으로 포트포워딩이란 IP 주소:포트 번호 형식으로 된 주소로 보내는 통신 요청을 원래 보내려는 주소가 아닌 다른 주소로 넘겨주는것을 말한다.
포트 포워딩이 필요한 상황을 생각 해보면
위 그림 처럼 User가 서버 A 내 특정 Web Server에 접속을 해야하는데 서버 A에서는 보안상의 이유로 SSH 서버가 붙어있는 22번 포트외에는 전부 막아놓은 상태라고하자. 그러면 User는 어떻게해야 Web Server에 요청을 보낼 수 있을까?
이 때, SSH에 연결된 22번 포트를 Web Server에 연결 된 80번 포트로 포트포워딩 해주면 아래 그림처럼 User가 방화벽을 피해 Web Server에 접근할 수 있다.
SSH를 이용한 포트포워딩의 경우 사용자 인증부터 데이터 전송까지 모든 과정이 암호화 되게 되는데 보안측면에서 터널링을 적용했다고 볼 수도 있다. 그래서 SSH 포트포워딩을 SSH 터널링이라고도 부른다.
SSH 포트포워딩 (= SSH 터널링)의 종류
1. 로컬 포트포워딩 💻 -> 🛢
로컬(SSH Client) -> 서버(SSH Server)로의 포트포워딩
예를 들면 회사에서 사용하는 RDS 같은 상황이다.
내 로컬에서 RDS에 접근하기 위해서는 bastion EC2를 통해 접근을 하는 수 밖엔 없다.
이때 bastion EC2에서 포트포워딩을 통해 내 로컬의 13306(사용하지 않는 임의의 포트)를 RDS가 붙어있는 3306 포트로 터널링 해주면 내 로컬의 13306 포트를 통해 RDS에 접속할 수 있다.
그림의 예시에 맞게 명령어를 구성해보면
ssh -L 13306:RDS주소:3306 EC2주소
그런데 bastion EC2서버에 접속하기 위해서는 키 인증이 필요하므로 키 인증에 관련된 명령어 옵션도 추가해 주면 다음과 같다.
ssh -i 키파일경로 -L 13306:RDS주소:3306 EC2주소
터미널이 열려있는동안, 포트포워딩은 유지되고 아래 그림 처럼 로컬 13306 포트로 바로 RDS에 접근할 수 있게 된다.
RDS 연결은 Sequel Ace 툴로 확인해 보았다.만약 터미널 창이 열려있는동안만 터널링이 유지되는것이 불편하다면, 아래 옵션을 명령어에 추가해 주어서 SSH 프로세스를 백그라운드로 실행시키면 된다.
-f : 백그라운드로 실행 하겠다.
-N : -f 옵션 만 지정 하면 `Cannot fork into background without a command to execute.` 에러가 나는데 -N 옵션을 함께 지정해 주어야 에러가 나지 않는다.
-v : 상세 모드를 켜서 디버깅용 로그를 표시하겠다.
최종적인 백그라운드 실행용 명령어는 다음과 같다.
ssh -f -N -i 키파일경로 -L 13306:RDS주소:3306 EC2주소 -v
이 상태에서 터미널을 닫아도 ssh 프로세스는 살아있기 때문에 아래와 같이 로컬 포트 13306으로 RDS 접속이 가능하다.
출처:
'🏢 업무 리서치 기록' 카테고리의 다른 글
로그인 기능 구현의 과정 (feat. OAuth2.0 와 JWT) (0) 2022.12.16 OLTP VS OLAP (feat. 트랜잭션 ACID 특성) (0) 2022.12.15 [BigQuery] Streaming Insert VS Insert Into DML Query (1) (0) 2022.12.01 YouTube 데이터와 친해지기 (2) - Channel Reports VS Content Owner Reports (1) 2022.12.01 YouTube 데이터와 친해지기 (1) - YouTube Analytics API VS YouTube Reporting API (0) 2022.10.27