Cloudflare Tunnel SSH 설정 가이드
준비물
- Cloudflare 계정
- Cloudflare에 등록된 도메인
- SSH를 열 서버
서버 설정
1. cloudflared 설치
Ubuntu/Debian
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb2. Cloudflare 로그인 및 터널 생성
# Cloudflare 인증
cloudflared tunnel login
# 터널 생성
cloudflared tunnel create <터널-이름>
# 터널 목록 확인 (터널 ID 확인용)
cloudflared tunnel list⚠️ 터널 생성 시
/root/.cloudflared/<터널-ID>.json파일이 자동 생성됨. 이 파일이 없으면 터널 실행 불가.
3. 설정 파일 작성
tunnel: <터널-ID>
credentials-file: /root/.cloudflared/<터널-ID>.json
ingress:
- hostname: ssh.yourdomain.com
service: ssh://localhost:22
- service: http_status:4044. DNS 레코드 연결
cloudflared tunnel route dns <터널-이름> ssh.yourdomain.com5. 터널 실행
임시 실행 (테스트):
cloudflared tunnel run <터널-이름>서비스로 등록 (영구 실행):
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared클라이언트(Mac) 설정
1. cloudflared 설치
brew install cloudflared2. SSH config 설정
Host ssh.yourdomain.com
ProxyCommand cloudflared access ssh --hostname %h
User <서버_사용자명>3. 접속
ssh ssh.yourdomain.com
# SSH 키 사용 시
ssh -i ~/.ssh/your_key ssh.yourdomain.com트러블슈팅
credentials 파일이 없을 때
# 파일 존재 여부 확인
ls /root/.cloudflared/*.json
# 없다면 터널 삭제 후 재생성
cloudflared tunnel delete <터널-이름>
cloudflared tunnel create <터널-이름>config.yml의 credentials-file 경로에 .json 확장자가 포함되어 있는지 확인.
참고
- 포트 22를 외부에 열 필요 없음 — 모든 트래픽이 Cloudflare 터널을 통해 암호화됨
- Cloudflare Access와 연동하면 이메일 인증, SSO 등 추가 인증 설정 가능
- 무료 플랜에서도 사용 가능