본문 바로가기

ETC/AWS

SSH 연결과 터널링(Tunneling)

회사에서 추천받은  클라우드 용어 정리
리소스 SSH 연결, 터널링 "PuTTY" 프로그램, "plink" 프로그램,  점프호스트(Bastion 호스트)

 

이렇게 한묶음으로 정리가 될거같다.

 

1. SSH (Secure Shell)

- 원격 서버에 안전하게 접속하기위한 프로토콜
- 다른 컴퓨터에 로그인하여 터미널에서 작업을 할 수 있게해주는 기술
    - 예: AWS EC2, Azure VM 등 리눅스 서버에 접속하는 경우
- ID + PWD 방식보다 공개키+개인키 방식을 많이 사용
   - 클라이언트에 개인키(Private Key), 서버에 공개키(Public Key) 저장 

# 접속 명령어
ssh [사용자이름]@[서버주소 또는 IP] => ssh ubuntu@3.38.123.456
 └ ubuntu(서버에서 사용할 사용자 이름), 3.38.123.456(AWS EC2같은 서버의 퍼블릭 IP)​

- 현재 실무에서는 MobaXterm으로 SSH를 사용

 

1. SSH 연결 

- 로컬 컴퓨터에서 EC2 리눅스 서버에 원격으로 접속하는것

1)  구성 요소

구성 요소 설명
EC2 인스턴스 접속 대상 리눅스 서버
보안 그룹(Security Group)  port 22(SSH)가 열려있어야 한다
키 페어(Key Pair) .pem 또는 .ppk 파일 – 비밀번호 대신 인증
공개 IP 외부에서 접속할 수 있는 퍼블릭 IP or 도메인
SSH 클라이언트 로컬에서 접속하는 도구 (Mac/Linux: 터미널, Windows: PuTTY 등)
✒️ 키 페어(Key Pair)
- Key 파일은 비밀번호 없이 접속할 수 있도록 도와주는 신분증
- EC2 인스턴스 생성시, 키 페어를 지정한다
- 공개키는 EC2 서버에 저장되고, 개인키(.pem)은 나의 저장소에 저장한다

2 -1 ) SSH 접속 - Mac / Linux 접속 

Mac이나 Linux 환경에서는 터미널에서 ssh 명령어를 사용하여 쉽게 EC2 인스턴스(리눅스)에 접속 할 수 있다. 

chmod 400 my-key.pem  # 키 권한 설정
ssh -i my-key.pem ec2-user@퍼블릭IP
  • -i : 키 파일 지정
  • ec2-user:  Amazon Linux 기본 사용자 명 (Ubuntu라면 ubuntu)
  • 퍼블릭IP: EC2 인스턴스의 퍼블릭 IP 주소 입력

2 -2 ) SSH 접속 - Windows 접속 

- Windows는 기본적으로 SSH 기능이 내장되어있지 않음터미널 에뮬레이터를 사용하여 접속

- MobaXTerm과 PuTTY를 많이 사용한다 

 

1️⃣  PuTTY 사용 

1. EC2 인스턴스 생성 시 받은 .pem 키 파일을 → PuTTYgen 도구로 .ppk 형식으로 변환
2. PuTTY 실행 후 설정을 입력:
    Host Name: ec2-user@<퍼블릭IP>
    Port: 22
    왼쪽 메뉴의 Connection → SSH → Auth 선택
    Private key file에 .ppk 파일 경로 설정 Open 버튼 클릭 → 접속 성공시 터미널 창 뜸
3. EC2에 접속 완료

 

✒️ PuTTY
- 원격 서버에 접속할 수 있도록 도와주는 SSH/Telnet 클라이언트 프로그램
- 리눅스의 ssh 명령어가 없는 windows 사용자들이 EC2 서버에 접속할 때 사용
- SSH/Telnet/Serial 연결을 통해 EC2, 온프레미스, 리눅스 서버 등 원격 리눅스 시스템을 제어 할 때 사용

기능 설명
SSH 접속 리눅스 서버에 안전하게 원격 접속 지원
Talnet 접속 옛날 텍스트 기반의 접속 방식 지원
Port Forwarding(터널링) 로컬 포트를 원격서버로 연결 가능하도록 함
Key 기반의 로그인  .ppk 파일을 이용한 인증
세션 저장 자주 접속하는 서버의 정보 저장

✒️ plint(PuTTY Link)
- PuTTY의 명령어 기반 CLI 버전( SSH, Telnet, Rlogin 프로토콜을 사용하여 원격 서버에 접속할 수 있는 CLI도구)
- 스크립트, 배치, 자동화에 사용
- putty 전용 포맷인 .ppk의 키를 사용해야함 (AWS EC2의 .pem 키를 직접 사용 불가! )
   → PuTTYgen을 사용하여 .ppk로 변환해서 사용해야 함

 

2️⃣ MobaXterm 사용

- PuTTY보다 더 직관적인 UI를 제공

1. MobaXterm 실행 → Session 클릭 SSH 탭 선택
2. Remote host: <퍼블릭IP> 입력
3. Specify username: ec2-user 입력
4. 아래의 Use private key 옵션 체크 → .pem 파일 선택
5. 접속 시도 → 성공하면 터미널 창이 열린다

주의 사항 (공통)

  • 보안 그룹 인바운드 규칙에 포트 22(SSH) 가 열려 있어야 함
  • 로컬 PC의 IP가 보안 그룹에 허용되어 있어야 함
  • 키 파일의 권한은 chmod 400 등으로 반드시 제한해야 함

2. 터널링 ( Tunneling )

- SSH 연결을 통해 로컬과 원격의 다른 서버(서비스)에 안전하게 접근(전달)하는 것

   (VPN처럼 중간에서 데이터를 암호화하여 보안 통로를 만드는 기술)

로컬 DB(3311) ↔ 터널링 ↔ 원격 DB(45432)

- 터널링하여 서버에 직접 접속한 것처럼 데이터베이스와 통신

 

1) 사용하는 이유(필요성)

상황 예시
외부에서 접근이 막힌 서버에 들어가야 할 때 사설망에 있는 DB, 내부 웹 등
민감한 서비스에 안전하게 접속하고 싶을 때 DB 관리, 웹 관리 툴 등
점프 호스트(중간 서버)를 거쳐야 할 때 Bastion Host 구성 시 필수
 

2) 터널링 유형

1️⃣ 로컬 포워딩 (Local Port Forwarding) 

내 로컬 포트에 요청 → SSH를 통해 원격 서버의 포트에 전달 (로컬 → 원격)

 

📌 사용 방식

내 PC (localhost:8888) 
    ↘
     SSH 암호화 터널  
            ↘ 
         원격 서버의 MySQL (db-server:3306)

 

예시 (MySQL 접속)
내 PC에서 DB가 열려있는 것처럼 사용 가능

ssh -i my-key.pem -L 8888:db.internal.com:3306 ec2-user@bastion-host
  • 내 PC localhost:8888 에 접속하면
  • SSH를 통해 db.internal.com:3306 에 안전하게 연결됨

2️⃣ 원격 포워딩 (Remote Port Forwarding) 

원격 서버의 포트로 접근 → 내 PC로 전달 (원격 → 로컬)

  • 로컬 개발 서버를 외부에서 테스트할 때 유용하다
ssh -R 9000:localhost:3000 ec2-user@remote-server

→ 원격 서버의 localhost:9000에 접속하면, 내 PC의 localhost:3000으로 전달됨


3️⃣ 동적 포워딩 (Dynamic Port Forwarding) 

로컬 PC에서 프록시처럼 작동하는 SSH 터널 

  • SOCKS 프록시로 동작함
  • 브라우저 프록시 설정 → 모든 트래픽을 암호화된 터널로 전달 가능
ssh -D 1080 ec2-user@remote-server

→ Chrome, Firefox 프록시 설정에서 localhost:1080 SOCKS 프록시 지정 시
     모든 웹 트래픽이 암호화된 터널을 통해 전달됨 (VPN 느낌)

 

 

터널링 유형 설명 예시
Local Forwarding 로컬 → 원격 포트 전달 -L 8888:target:port
Remote Forwarding 원격 → 로컬 포트 전달 -R 9000:localhost:3000
Dynamic Forwarding SOCKS 프록시처럼 작동 -D 1080
더보기

🛠 실무: DB 서버 터널링

  • DB 서버는 사설망에 있고, 직접 접근 불가
  • Bastion 서버(점프호스트)를 통해서만 접속 가능

설정 방법

ssh -i my-key.pem -L 3307:private-db:3306 ec2-user@bastion-server

→  localhost:3307 로 DB 클라이언트(MySQL Workbench 등)에서 접속 가능


 정리

  • Bastion 서버(Jump Host)를 이용한 SSH + 터널링 실무에서 자주 사용
  • 툴(PuTTY, MobaXterm)에서도 GUI로 터널링 설정 가능
  • 터널을 사용할 땐 보안 설정(접속 포트, IP 허용 범위)을 꼭 함께 관리하자!

추가 공부

JumpHost와 Bastion Host

- 외부에서 사설망(내부망)의 서버에 접근할 수 있도록 해주는 보안용 중간 서버(SSH)

 

  • 회사는 보안적인 이유로 외부(인터넷)에서 바로 내부 EC2, DB, 서버 등에 접근할 수 없도록 차단함
  • 하지만, 외부와 내부 사이에 중간 관문(점프 호스트) 를 두고, 점프호스트를 통해서만 내부망에 접속할 수 있다
용어 설명  차이점
Jump Host 내부망으로 "점프"하기 위한 중간 서버 주로 네트워크 용어
Bastion Host 외부의 접근이 허용된 보안 게이트웨이 서버 AWS나 클라우드 보안에서 자주 사용
실무에선 같은 뜻으로 사용

 

1) 사용이유 - 보안적인 이유

  • 내부 리소스를 공개 인터넷에 노출하지 않기 위해
  • Bastion에는 MFA, 키 인증, IP 제한, 모니터링 등 보안이 집중됨
  • 터널링 또는 ProxyCommand로 내부 서버를 안전하게 사용

2) 구조 

[로컬PC]
   ↓ (SSH)
[Bastion Host]  ← 공개 서브넷 (Public Subnet)
   ↓ (SSH)
[Private EC2]   ← 사설 서브넷 (Private Subnet)

 

  • 로컬 PC는 인터넷을 통해 Bastion에 접속
  • Bastion은 사설망에 있는 EC2 또는 DB에 SSH 접속
  • 직접 사설망에 접근은 불가
   
Bastion EC2 Public Subnet에 위치, 인터넷에서 접근 허용 (22포트)
Private EC2 Private Subnet에 위치, SSH는 오직 Bastion에서만 허용
Security Group 설정 Bastion은 0.0.0.0/0 → Private EC2는 Bastion의 IP만 허용

3) 실무 접속 방식

(1) 단순 SSH 이중 접속

# 1단계: Bastion 접속
ssh -i bastion.pem ec2-user@bastion-ip

# 2단계: Private EC2로 SSH
ssh -i private-key.pem ec2-user@private-ec2-ip

 

(2) SSH 터널링 또는 ProxyCommand 사용

# SSH config 설정 ( ~/.ssh/config )
Host private-server
    HostName 10.0.2.10
    User ec2-user
    IdentityFile ~/.ssh/private.pem
    ProxyJump ec2-user@bastion-ip

 

 
목적 내부망 보호 + 안전한 SSH 접속
위치 퍼블릭 서브넷
접근 외부 → Bastion → 내부 EC2
구성 방식 보안 그룹, 서브넷 분리, 키 인증
실무 사용 터널링, ProxyJump, bastion host 로그 관리 등 필수