2 min read

Bastion + SSH 에이전트 포워딩을 통한 접속

Bastion,SSH,에이전트,포워딩,접속

🛡️ Bastion 서버란?

Bastion 서버는 외부에서 내부 네트워크로의 접속을 중계해주는 보안 게이트웨이 서버입니다. 일반적으로 아래와 같은 목적에 사용됩니다:

  • 프라이빗 네트워크 내부에 있는 서버(예: EC2)에 직접 접근하지 않고, Bastion을 거쳐서만 접속 가능하게 함
  • 외부로부터의 직접 접속을 막고, 접근을 중앙 통제
  • 보안성을 높이고 접근 로그를 추적 가능하게 함

이 문서에서는 Bastion 서버를 Docker 컨테이너로 구성하고, 클라이언트에서 SSH 에이전트 포워딩을 사용하여 EC2 컨테이너에 접속하는 실습 환경을 다룹니다.

작업 세팅 환경은 다음에 링크에서 받을수 있다

git clone https://github.com/rinechran/bastion-lab.git
# 예비 git
git clone https://git.kudryavka.me/blog/bastion-lab.git

📦 시스템 구성도

[로컬 클라이언트 (Windows)]
   - bastion_key.pem
   - ec2_key.pem (ssh-agent에 등록)

     ↓ SSH -A (에이전트 포워딩)

[Bastion (Docker 컨테이너)]
   - ec2_key.pem 없음
   - 클라이언트 ssh-agent를 통해 서명 요청

     ↓ SSH

[EC2 (Docker 컨테이너)]
   - authorized_keys에 ec2_key.pem.pub 등록됨

✅ 파일 구성

bastion-ec2-lab/
├── docker-compose.yml
├── keys/
│   ├── bastion_key.pem         # Bastion 접속용 개인 키
│   └── ec2_key.pem             # ssh-agent에 등록할 EC2 키
├── bastion/
│   ├── Dockerfile
│   ├── sshd_config
│   ├── entrypoint.sh
│   └── authorized_keys         # bastion_key.pem.pub 삽입
└── server/
    ├── Dockerfile
    ├── sshd_config
    ├── entrypoint.sh
    └── authorized_keys         # ec2_key.pem.pub 삽입

🔧 1단계: ssh-agent 실행 & EC2 키 등록

PowerShell (관리자 권한) 실행 후 아래 입력:

Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent
ssh-add .\keys\ec2_key.pem
등록이 성공하면 ssh-add -l 명령어로 확인 가능

🚀 2단계: Docker 컨테이너 실행

docker-compose up -d --build

🔐 3단계: Bastion 접속 (에이전트 포워딩 포함)

ssh -A -i keys/bastion_key.pem root@localhost -p 2222
-A 옵션으로 ssh-agent 포워딩 활성화됨

📡 4단계: Bastion 내부에서 EC2 접속

ssh root@ec2
EC2 컨테이너는 hostname: ec2 로 설정되어 있어야 함

가끔 베스천서버는 어떻게 구성해야하는지 물어보는 사람이 많아 해당글을 작성하였다.