본문 바로가기
네트워킹 기초·보안

SSH 터널링 실습 기록 – MobaXterm으로 Bastion 서버 경유해 내부 데이터 서버 접속(키 기반 인증)

by joe2026 2026. 1. 25.

MobaXterm을 활용해 Bastion(서버1)을 경유하여 내부 데이터 서버(서버2)에 접속하기 — 키(Key) 기반 인증 + 로컬 포트 포워딩(터널링)

 

서버 운영 환경에서는 보안상의 이유로 모든 서버를 인터넷에 직접 노출하지 않는 구조를 사용하는 경우가 많다. 이번 글에서는 외부 인터넷이 가능한 서버1(Bastion 서버)을 경유하여 내부망에만 존재하는 서버2(Data 서버)에 접속하는 방법을 실습 기반으로 정리한다.

특히, 일반 사용자(kelvin)가 서버1에 로그인(쉘 접근)하지 못하도록 차단하되, 터널링만 허용하여 서버2로 안전하게 접근하도록 구성하는 것이 목표다.

1. 실습 환경 구성

네트워크 구조

  • 서버1 (Bastion / Jump Server): 인터넷 연결 가능, 외부 SSH(22) 접근 허용
  • 서버2 (Data Server): 외부 인터넷 연결 불가, 서버1과 내부 네트워크로만 연결
  • 클라이언트: Windows, MobaXterm 사용

사용자 구성

사용자 서버1 서버2 비고
joe (관리자) 접근 가능 접근 가능 키 관리 담당
kelvin (일반 사용자) 로그인 불가(터널만) 접근 가능 서버2 전용 키 발급

2. 실습 목표

  • kelvin 사용자에게 서버2 전용 SSH 키 발급
  • kelvin은 서버1에 직접 로그인(쉘)하지 못하도록 제한
  • MobaXterm에서 로컬 포트 8001로 접속
  • 내부적으로 로컬(8001) → 서버1(22) → 서버2(22)로 터널링
  • kelvin PC에는 프라이빗 키(개인키)만 저장하고 서버2로 바로 진입

3. kelvin용 SSH 키 생성 (관리자: joe)

관리자(joe)가 서버2 접근 전용 키를 생성한다.

ssh-keygen -t ed25519 -f kelvin_server2

생성 결과:

  • kelvin_server2 : 개인키(프라이빗 키) — kelvin에게 전달
  • kelvin_server2.pub : 공개키(퍼블릭 키)

4. 서버2에 공개키 등록 (관리자: joe)

서버2에서 kelvin 계정의 SSH 설정을 진행한다.

mkdir -p /home/kelvin/.ssh
chmod 700 /home/kelvin/.ssh
cat kelvin_server2.pub >> /home/kelvin/.ssh/authorized_keys
chmod 600 /home/kelvin/.ssh/authorized_keys
chown -R kelvin:kelvin /home/kelvin/.ssh

핵심은 권한이다. ~/.ssh는 700, authorized_keys는 600이 권장되며, 소유자는 반드시 kelvin이어야 한다.

5. 서버1에서 kelvin 로그인 차단(터널링만 허용)

서버1은 중계 역할만 수행하도록 설정한다. kelvin은 서버1에 쉘로 로그인할 수 없고, 포트 포워딩만 가능하도록 제한한다.

5-1) 서버1에 kelvin 계정 생성(필요 시)

useradd kelvin

5-2) SSH 데몬 설정 변경: /etc/ssh/sshd_config

vi 또는 편집기로 아래 설정을 추가한다.

Match User kelvin
    AllowTcpForwarding yes
    PermitTunnel yes
    X11Forwarding no
    AllowAgentForwarding no
    ForceCommand /bin/false
  • AllowTcpForwarding: 포트 포워딩 허용
  • ForceCommand /bin/false: 쉘 로그인 차단(터널 목적 외 실행 불가)
  • Agent/X11 Forwarding: 불필요 기능 비활성화(보안 강화)

5-3) SSH 재시작

systemctl restart sshd

5-4) 서버1 방화벽 확인(SSH 22 허용)

firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload

6. MobaXterm 터널링 설정 (kelvin PC)

kelvin PC에는 개인키(프라이빗 키) 파일 1개만 저장한다: kelvin_server2.

6-1) 서버1로 SSH 세션 생성

  • Session → SSH
  • Remote host: 서버1 IP
  • Username: kelvin
  • Port: 22
  • Advanced SSH settings → Use private key 체크 → kelvin_server2 선택

6-2) Local Port Forwarding(로컬 포워딩) 설정

항목
Local port 8001
Remote server 서버2 IP
Remote port 22

이 세션은 “터미널 로그인”이 목적이 아니라, 터널을 유지하기 위한 용도다. 따라서 세션이 열렸다가 바로 종료되는 것처럼 보여도 설정에 따라 정상일 수 있다(터널 유지 방식은 MobaXterm 옵션에 따라 다름).

7. 서버2 접속 (kelvin 실제 사용 방법)

터널이 열린 상태에서, 로컬 터미널에서 다음 명령으로 서버2에 접속한다.

ssh -i kelvin_server2 -p 8001 kelvin@localhost
  • 로컬 8001 포트로 접속 → 서버1을 통해 서버2:22로 연결
  • 패스워드 입력 없이 키 기반 인증으로 접속
  • 서버1 쉘 로그인은 차단되어 있어, 서버1 접근 리스크 최소화

8. 접속 확인(검증)

서버2 접속 후 다음 명령으로 계정/호스트를 확인한다.

whoami
hostname

서버1에서는 보안 로그로 터널링 접속 기록을 확인할 수 있다.

tail -n 200 /var/log/secure

9. 정리

이번 실습을 통해 다음과 같은 운영 구조를 직접 구현해 보았다.

  • 내부 데이터 서버(서버2) 외부 노출 차단
  • Bastion 서버(서버1) 기반 보안 접근 패턴
  • 키 기반 인증으로 계정 보안 강화
  • 일반 사용자는 터널링만 허용하여 서버1 위험 최소화

SSH 터널링 실습 설계도

 


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 클라우드학습기