내 PC에서 서버 DB 안전하게 접속하기 (SSH 터널)
HeidiSQL, DBeaver, MySQL Workbench 같은 프로그램으로 서버의 DB를 보고 싶을 때, DB 포트(3306)를 인터넷에 열면 안 됩니다. 전 세계에서 자동화된 로그인 시도가 바로 들어옵니다. 대신 SSH 터널을 쓰면 이미 열려 있는 SSH 접속을 통해 DB에 안전하게 연결할 수 있습니다.
DB 설치와 앱 전용 계정 만들기는 데이터베이스 설치하기를 먼저 참고하세요.
방법 1. DB 프로그램의 SSH 터널 기능 (가장 쉬움)
대부분의 DB 프로그램에 SSH 터널 설정 칸이 있습니다.
HeidiSQL
- 새 세션 → 네트워크 유형: MariaDB or MySQL (SSH tunnel)
- 설정 탭: 호스트
127.0.0.1, 사용자·암호는 DB 계정, 포트3306 - SSH 터널 탭: SSH 호스트 + 포트에 서버 IP와
22, 사용자 이름·암호는 서버 SSH 계정, 로컬 포트는3307등 비어 있는 번호
DBeaver
- 새 연결 → MariaDB(또는 MySQL)
- Main 탭: Host
127.0.0.1, Port3306, DB 계정과 비밀번호 - SSH 탭: "Use SSH Tunnel" 체크, Host에 서버 IP, Port
22, 서버 SSH 계정과 비밀번호(또는 키 파일)
두 계정을 헷갈리기 쉽습니다. SSH 칸에는 서버 접속 계정, DB 칸에는 DB 계정을 넣습니다.
방법 2. 명령어로 터널 열기
내 PC의 터미널(PowerShell)에서 실행하고, 이 창은 켜둡니다.
ssh -N -L 3307:127.0.0.1:3306 계정명@서버IP
- 내 PC의
3307번으로 들어온 연결을 서버 안의127.0.0.1:3306(DB)으로 전달한다는 뜻입니다. - 비밀번호를 입력한 뒤 아무것도 출력되지 않고 멈춰 있으면 정상입니다.
이제 DB 프로그램에서 호스트 127.0.0.1, 포트 3307, DB 계정으로 접속합니다. 다 쓰면 터널 창에서 Ctrl + C로 닫습니다.
접속이 안 될 때
- Access denied for user — DB 계정이
'계정'@'localhost'로 만들어져 있는지 확인하세요. 터널을 쓰면 DB 입장에서는 서버 안에서 접속한 것으로 보입니다. - SSH 연결 실패 — 먼저 SSH 접속 가이드대로 터미널에서 접속이 되는지 확인하세요.
- 3307 포트가 이미 사용 중 — 내 PC에 MySQL이 깔려 있다면
3308등 다른 번호를 쓰세요.
Docker로 띄운 DB라면
컨테이너 포트를 -p 127.0.0.1:3306:3306처럼 서버 안에만 연결해두었다면 위 방법을 그대로 쓸 수 있습니다. -p 3306:3306으로 열어두었다면 ufw를 무시하고 인터넷에 열려 있는 상태이니 바로 고치세요. (Docker 가이드의 방화벽 주의)