개발새발
DBeaver로 원격 PostgreSQL에 SSH 터널링으로 접속하기 본문
프로덕션 DB는 보안상 외부 인터넷에 직접 노출하지 않는 게 원칙이다. AWS RDS나 사내 DB에 일반적인 방법으로 DBeaver 접속이 거부되는 경험을 한 번쯤 해봤을 것이다. 이는 DB 서버에 공인 IP를 아예 할당하지 않거나, 방화벽으로 DB 포트(5432)를 막아두기 때문이다.
이 글에서는 PostgreSQL을 네이티브로 설치한 Ubuntu 서버에 SSH 터널링 + PEM 키 인증으로 DBeaver를 연결하는 전 과정을 다루려고 한다.
[DBeaver (Mac)]
│
│ SSH (포트 your_ssh_port)
▼
[Remote Server your_server_ip]
│
│ localhost:5432
▼
[PostgreSQL - 외부 미노출]
PostgreSQL은 localhost만 수신하도록 설정하고, DBeaver는 SSH 터널을 통해 서버 내부에서 DB에 접근한다.
1. PostgreSQL 설치 및 설정
sudo apt install postgresql postgresql-contrib
sudo systemctl enable postgresql
sudo systemctl start postgresql
DB 및 유저 생성
sudo -u postgres psql
CREATE USER your_db_user WITH PASSWORD 'your_db_password';
CREATE DATABASE your_db_name OWNER your_db_user;
\q
localhost만 수신하도록 설정
/etc/postgresql/14/main/postgresql.conf:
listen_addresses = 'localhost'
/etc/postgresql/14/main/pg_hba.conf:
host all all 127.0.0.1/32 md5
sudo systemctl restart postgresql
2. SSH 키 생성
DBeaver는 SSH 터널에 비밀번호 대신 PEM 키(공개키 인증) 를 사용한다.
# 서버에서 키 생성
ssh-keygen -t rsa -b 4096 -C "your_key_comment" -f /home/your_user/your_key -N ""
왜 RSA인가?
처음에는 더 현대적인 ed25519로 생성했으나 DBeaver의 SSHJ 라이브러리와 호환 문제가 있었다. RSA 4096이 더 안정적으로 동작한다.
생성 결과:
your_key → 개인키 (로컬에 저장, 절대 유출 금지)
your_key.pub → 공개키 (서버에 등록)
키 포맷 변환 (중요)
ssh-keygen이 기본으로 생성하는 OpenSSH 포맷(-----BEGIN OPENSSH PRIVATE KEY-----)은 DBeaver SSHJ가 인식하지 못한다. 전통적인 PEM 포맷으로 변환해야 한다.
ssh-keygen -p -m PEM -f /home/your_user/your_key -N ""
변환 후 첫 줄이 -----BEGIN RSA PRIVATE KEY-----로 바뀌면 정상이다.
서버에 공개키 등록
# 사용자 생성
sudo useradd -m -s /bin/bash your_user
# .ssh 디렉토리 설정
sudo mkdir -p /home/your_user/.ssh
sudo cat /home/your_user/your_key.pub >> /home/your_user/.ssh/authorized_keys
sudo chown -R your_user:your_user /home/your_user/.ssh
sudo chmod 700 /home/your_user/.ssh
sudo chmod 600 /home/your_user/.ssh/authorized_keys
# 홈 디렉토리 권한
sudo chown your_user:your_user /home/your_user
sudo chmod 755 /home/your_user
4. DBeaver 최종 설정
SSH 탭
| Use SSH Tunnel | ✅ |
| Host/IP | your_server_ip |
| Port | your_ssh_port |
| User Name | your_user |
| Authentication | Public Key |
| Private Key | your_key.pem 경로 |

Main 탭
| Host | localhost |
| Port | 5432 |
| Database | your_db_name |
| Username | your_db_user |
| Password | your_db_password |

연결 확인 (터미널)
ssh -i ~/path/to/your_key.pem -p your_ssh_port your_user@your_server_ip

| 증상 | 원인 |
| SSH public key authentication failed | ed25519 키 또는 OpenSSH 포맷 문제 |
| Too many authentication failures | MaxAuthTries 부족 또는 유저명 오류 |
| key type ssh-rsa not in PubkeyAcceptedAlgorithms | Ubuntu 22.04에서 ssh-rsa 비활성화 |
| Authentication refused: bad ownership | 홈 디렉토리 소유자 문제 |
| Load key: bad permissions | PEM 파일 권한이 너무 열려 있음 |
오른쪽 아래의 Test Connection을 눌러 다음과 같이 연결이 되는지 테스트 해 볼 수 있다.

그럼 이렇게 접속이 된 모습을 확인 할 수 있다!

'기타' 카테고리의 다른 글
| GitHub 멀티 계정 설정 가이드 (macOS) (0) | 2026.04.15 |
|---|---|
| EKS 내부 DB 접속하기: kubectl port-forward로 PostgreSQL 로컬 연결 (0) | 2026.03.17 |
| conda 내보내기 (0) | 2026.02.05 |
| 윈도우10 환경변수(시스템변수) path 삭제 시 복구하기 (0) | 2025.10.08 |
| vscode에서 c코드 실행하기 (0) | 2025.10.04 |