[EC2] Bastion 호스트를 통한 SSH 터널링 설정 가이드
Prerequisite (전제조건)
본 가이드를 진행하기 전에 다음 항목이 준비되어 있어야 합니다:
- Bastion 호스트가 Public Subnet에 생성되어 있어야 합니다
- Bastion 호스트의 보안 그룹에서 SSH(22) 포트가 허용되어 있어야 합니다
- Bastion 호스트의 Private Key(.pem 파일)를 보유하고 있어야 합니다
- 접근하려는 VPC 내부 리소스(RDS, ElastiCache 등)의 엔드포인트 정보를 알고 있어야 합니다
- 내부 리소스(RDS, ElastiCache 등)의 보안 그룹에서 Bastion 호스트로부터의 접근이 허용되어 있어야 합니다
- 로컬 PC에 SSH 클라이언트가 설치되어 있어야 합니다
- macOS/Linux: 기본 설치됨
- Windows: Git Bash, WSL, 또는 PuTTY 필요
Process
1. Private Key 권한 설정 (macOS/Linux만 해당)
-
터미널을 열고 Private Key 파일이 있는 디렉토리로 이동합니다
cd ~/.ssh
-
Private Key 파일의 권한을 변경합니다
chmod 400 bastion-key.pem
2. Bastion 호스트 연결 테스트
-
터미널에서 다음 명령어로 Bastion 호스트에 접속이 가능한지 테스트합니다
ssh -i ~/.ssh/bastion-key.pem ec2-user@<Bastion-Public-IP>
-
접속이 성공하면
exit명령어로 연결을 종료합니다
3. 대상 리소스 정보 확인
접근하려는 VPC 내부 리소스의 정보를 AWS 콘솔에서 확인합니다.
RDS의 경우:
-
AWS 콘솔에서 RDS 서비스로 이동합니다
-
접근하려는 데이터베이스를 선택합니다
-
연결 & 보안 탭에서 다음 정보를 확인합니다:
- 엔드포인트:
my-database.xxxxxx.ap-northeast-2.rds.amazonaws.com - 포트:
5432(PostgreSQL) 또는3306(MySQL)

- 엔드포인트:
ElastiCache의 경우:
-
AWS 콘솔에서 ElastiCache 서비스로 이동합니다
-
클러스터를 선택하고 기본 엔드포인트 정보를 확인합니다
- 엔드포인트:
my-redis.xxxxxx.cache.amazonaws.com - 포트:
6379

- 엔드포인트:
4. SSH Config 파일 생성 및 설정
SSH Config 파일 열기
터미널에서 다음 명령어로 SSH Config 파일을 엽니다:
vi ~/.ssh/config
Bastion 호스트 설정 추가
파일의 가장 위에 Bastion 호스트 설정을 추가합니다.

Host bastion HostName 54.180.123.45 User ubuntu IdentityFile ~/.ssh/bastion-key.pem ServerAliveInterval 60 ServerAliveCountMax 3
- HostName : 실제 배스쳔 호스트의 Public IP주소
- IdentityFile : Private key 실제 경로
Bastion 설정 아래 터널 설정 추가
예) Postgres 터널
Host rds-tunnel HostName localhost User ubuntu IdentityFile ~/.ssh/bastion-key.pem ProxyJump bastion LocalForward 5432 my-database.xxxxxx.ap-northeast-2.rds.amazonaws.com:5432
- LocalForward의 첫번째 숫자 : 로컬포트 (일반적으로 대상 서비스와 동일하게 사용)
- 엔드포인트 : 대상의 엔드포인트 주소
- 마지막 숫자 : 대상의 서비스 포트
멀티 터널을 설정하려는경우
Host multi-tunnel HostName localhost User ubuntu IdentityFile ~/.ssh/bastion-key.pem ProxyJump bastion LocalForward 5432 my-database.xxxxxx.rds.amazonaws.com:5432 LocalForward 6379 my-redis.xxxxxx.cache.amazonaws.com:6379 LocalForward 27017 my-docdb.xxxxxx.docdb.amazonaws.com:27017
5. SSH 터미널 실행
터미널에서 설정한 Host 이름으로 터널을 실행합니다.

ssh -N rds-tunnel
- -N옵션은 원격 명령을 실행하지 않고 터널만 유지하는 옵션
- 명령어 이후 아무 메세지가 출력되지 않고 대기상태로 유지되면 정상
백그라운드실행
-f옵션을 추가하여 백그라운드로 터널을 유지할 수 있습니다.
ssh -fN multi-tunnel
6. 로컬에서 리소스 접근
로컬에서는 localhost를 활용하여 로컬에서 접근하듯이 그대로 사용합니다.
예) postgres 접속
psql -h localhost -p 5432 -U myusername -d mydatabase