linux

ssh reserve tunnel 가이드

jhinux 2025. 11. 15. 15:50

SSH 역방향 터널링 설정 가이드

(사무실 PC <-> 외부 서버)

이 가이드는 사무실 PC(사설 IP)와 외부 서버(공인 IP) 간에 안정적인 SSH 역방향 터널을 설정하고, 이를 systemd로 자동화하는 방법을 설명합니다.


1. 환경 설정

Role Office PC (Client & Server) External Server (Server & Client)
IP Address Private IP (192.168.x.x) Public IP (external_server_ip)
SSH Port 2218 22 (or custom)
User Account office_user server_user

목표: 외부 서버의 2222 포트를 통해 사무실 PC의 SSH 포트(2218)로 접속합니다.


2. 비밀번호 없는 SSH 키 인증 설정

명령 실행 위치: 사무실 PC

ssh-keygen -t rsa -b 4096  # Press Enter for all prompts (no passphrase)
ssh-copy-id -p 22 server_user@external_server_ip

 

3. SSH 역방향 터널링 명령어 테스트

명령 실행 위치: 사무실 PC

ssh -p 22 -fN -R 2222:localhost:2218 -o ServerAliveInterval=60 server_user@external_server_ip
  • -fN: 백그라운드에서 실행하고 쉘 명령은 실행하지 않습니다
  • -R 2222:localhost:2218: 외부 서버의 2222 포트로 들어오는 요청을 사무실 PC의 2218 포트로 전달합니다
  • ServerAliveInterval=60: 60초마다 Keep-Alive 메시지를 보내 연결 끊김을 방지합니다

외부 서버에서 접속 테스트:

ssh -p 2222 office_user@localhost

4. systemd를 이용한 자동 실행 및 유지

4.1 서비스 파일 생성

/etc/systemd/system/secure-tunnel.service:

[Unit]
Description=Secure SSH Reverse Tunnel to Office PC
After=network-online.target

[Service]
Type=forking
User=server_user
ExecStart=/usr/bin/ssh -p 22 -fN -R 2222:localhost:2218     -o ServerAliveInterval=60     -o ExitOnForwardFailure=yes     -o StrictHostKeyChecking=yes     server_user@external_server_ip
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

⚠️ ExitOnForwardFailure=yes 옵션은 포워딩 실패 시 즉시 재시작되도록 합니다.

4.2 호스트 키 등록

systemd 서비스 User로 지정된 계정(server_user)로 한 번 접속하여 키를 등록합니다:

sudo su - server_user
ssh -p 22 external_server_ip  # Accept host key
exit

4.3 서비스 활성화 및 시작

sudo systemctl daemon-reload
sudo systemctl enable secure-tunnel.service
sudo systemctl start secure-tunnel.service

4.4 상태 확인

sudo systemctl status secure-tunnel.service
journalctl -u secure-tunnel.service

5. 보안 권장 사항

  • 외부 서버의 2222 포트는 방화벽에서 특정 IP만 허용
  • StrictHostKeyChecking=yes 옵션으로 보안 강화
  • 자동 재연결을 위해 autossh 사용 고려:
autossh -M 0 -fN -R 2222:localhost:2218 server_user@external_server_ip

✅ 문제 해결

  • 서비스가 실패하면 로그 확인:
journalctl -u secure-tunnel.service
  • 일반적인 문제:
    • Wrong SSH port in ExecStart
    • Missing host key in known_hosts

 

'linux' 카테고리의 다른 글

NVM 리눅스 설치 및 사용법  (0) 2025.11.29
외부 접속을 위한 WSL2 SSH  (0) 2025.11.17
WSL2 가이드 정리  (0) 2025.11.15
Notification Guide  (0) 2025.11.13
ubuntu 22.04 & gemini cli  (0) 2025.11.09