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
- Wrong SSH port in
'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 |