웹사이트
SSH 터널을 통해 데이터베이스에 연결하기
Your site's MySQL server only listens on the server's own loopback address, so a desktop tool such as TablePlus, Sequel Ace, DBeaver or MySQL Workbench cannot dial it directly. An SSH tunnel gives…
사이트의 MySQL 서버는 서버 자체의 루프백 주소에서만 수신하므로 TablePlus, Sequel Ace, DBeaver 또는 MySQL Workbench와 같은 데스크탑 도구로 직접 연결할 수 없습니다. SSH 터널은 이러한 도구에 데이터베이스로 포워딩되는 로컬 포트를 제공하므로 MySQL을 인터넷에 열지 않고도 데이터에 적절한 GUI를 얻을 수 있습니다.
터널이 필요한 이유
웹사이트를 열고 사이트를 클릭한 다음 파일, 데이터베이스를 클릭하세요. 연결 세부정보 카드는 호스트를 127.0.0.1로, 포트를 3306로 표시합니다. 이는 자리표시자가 아닙니다. 데이터베이스는 실제로 자신이 실행 중인 머신에서만 연결을 허용합니다. 공인 인터넷의 어떤 것도 포트 3306에 도달할 수 없으므로 전체 공격 클래스를 제거합니다.
SSH 터널은 이 격차를 안전하게 좁혀줍니다. SSH 클라이언트가 랩톱의 포트를 열고 전송하는 모든 것을 암호화한 다음 마치 로컬 프로세스가 연결한 것처럼 서버 내부에서 데이터베이스에 전달합니다.

먼저 필요한 것
터널은 SSH 연결이므로 이 작업을 수행하기 전에 사이트에 등록된 SSH 키가 필요합니다. 먼저 사이트에 SSH 키 추가를 따르고 여기로 돌아오세요.
네 가지를 수집하세요:
- SSH 호스트, 포트 및 사용자 이름은 파일, SSH 키의 연결 세부정보 카드에서 확인하세요.
- 데이터베이스 이름, 사용자 이름 및 암호는 파일, 데이터베이스에서 확인하세요. 눈 아이콘을 클릭하여 암호를 표시하고 복사 아이콘을 클릭하여 클립보드에 넣으세요.
데이터베이스 탭에 이 사이트 유형에 대해 프로비저닝된 데이터베이스 없음이 표시되면 이 사이트에는 데이터베이스가 없습니다. 정적 사이트 및 일부 Node.js 사이트는 데이터베이스 없이 생성됩니다.
터미널에서 터널 열기
일반적인 형태는 로컬 포트를 SSH 연결의 반대편에 있는 127.0.0.1:3306로 포워딩하는 것입니다.
ssh -N -L 3307:127.0.0.1:3306 <ssh-username>@<ssh-host> -p <ssh-port>
-L 3307:127.0.0.1:3306은 머신의 포트 3307을 열고 서버의 루프백 인터페이스의 포트 3306으로 포워딩합니다.-N는 셸을 실행하지 않고 터널을 열린 상태로 유지합니다.- 이 사이트의 키가 기본 키가 아닌 경우
-i /path/to/key을 추가하세요.
해당 터미널 창을 계속 실행하세요. 열려 있는 동안 랩톱의 127.0.0.1:3307은 사이트의 데이터베이스입니다.
로컬에서 3306이 아닌 3307을 사용하세요. 자신의 머신에 MySQL 또는 MariaDB가 설치되어 있으면 이미 3306을 사용 중이며 터널이 "주소가 이미 사용 중" 오류로 바인딩에 실패합니다. 모든 사용 가능한 로컬 포트가 작동합니다.
데이터베이스 클라이언트를 터널로 향하게 하기
GUI 클라이언트에서 다음 값으로 일반 MySQL 연결을 만드세요:
| 필드 | 값 |
|---|---|
| 호스트 | 127.0.0.1 |
| 포트 | 3307 (포워딩한 모든 로컬 포트) |
| 사용자 | 데이터베이스 탭의 사용자 이름 |
| 암호 | 데이터베이스 탭의 암호 |
| 데이터베이스 | 데이터베이스 탭의 데이터베이스 이름 |
호스트 필드에 SSH 호스트를 입력하지 마세요. 클라이언트 입장에서는 자신의 머신의 데이터베이스와 통신하고 있습니다.
기본 제공 SSH 탭이 있는 클라이언트
TablePlus, Sequel Ace, DBeaver 및 MySQL Workbench는 모두 터널을 직접 관리할 수 있으므로 터미널을 계속 열어 두지 않아도 됩니다. 두 가지 필드 그룹을 채우세요:
- SSH 섹션: SSH 키 페이지의 호스트, 포트, 사용자 이름 및 개인 키 파일입니다.
- 데이터베이스 섹션: 호스트
127.0.0.1, 포트3306, 그리고 데이터베이스 탭의 데이터베이스 이름, 사용자 및 암호입니다.
클라이언트가 터널을 만들 때 로컬 포워딩된 포트 대신 데이터베이스 섹션에서 3306을 사용하세요. 클라이언트는 서버의 관점에서 연결하고 있으므로 실제 포트를 봅니다.
대신 phpMyAdmin 사용
테이블을 빠르게 살펴보기만 하면 되면 터널이 필요하지 않습니다. 데이터베이스 탭에는 phpMyAdmin 카드와 phpMyAdmin 열기 버튼이 있습니다. KPanel을 통해 로그인하므로 별도의 암호를 기억할 필요가 없으며 이 사이트의 데이터베이스를 이미 가리키는 새 탭에서 열립니다.
phpMyAdmin은 브라우징, 일회성 쿼리 실행 또는 값 확인을 위한 더 빠른 옵션입니다. 터널을 통한 데스크탑 클라이언트는 대규모 내보내기, 스키마 작업 및 스크립트를 원하는 모든 작업에 더 좋습니다. 브라우저 경로에 대해서는 phpMyAdmin 사용을 참조하세요.
터널을 통해 쿼리 및 덤프 실행
터널이 열려 있으면 표준 명령줄 도구가 로컬 포워딩된 포트를 가리키며 정상적으로 작동합니다:
mysql -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name>
mysqldump -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name> > backup.sql
수동 덤프는 백업 전략이 아닌 편의 사본입니다. 실행한 순간만큼만 최신이고 실행한 노트북에만 있습니다. Kapsule은 이미 사이트의 자동 일일 백업을 30일 동안 보존하고 있습니다. 로컬 .sql 파일에 의존하기 전에 백업 수행을 참조하세요.
문제 해결
터널을 열 때 "주소가 이미 사용 중"입니다. 머신의 어떤 것이 이미 해당 로컬 포트에 있습니다. -L 3399:127.0.0.1:3306 등 다른 포트를 선택하고 클라이언트의 포트를 일치하도록 변경하세요.
데이터베이스 클라이언트에서 "연결이 거부됨"입니다. 터널이 작동하지 않습니다. SSH 터미널이 여전히 실행 중이고 오류를 인쇄하지 않았는지 확인하고, 클라이언트의 포트가 -L 인수의 로컬 포트와 일치하는지 확인하세요.
SSH는 연결되지만 클라이언트가 여전히 시간 초과됩니다. 127.0.0.1:3306로 포워딩했는지 확인하고 공인 호스트 이름으로 포워딩하지 않았는지 확인하세요. 공인 이름으로 포워딩하면 서버가 인터넷을 통해 데이터베이스에 도달하도록 요청하는데, 이는 정확히 차단되는 것입니다.
"사용자에 대한 접근이 거부됨"입니다. SSH 로그인이 성공했지만 MySQL 자격증명이 잘못되었습니다. 다시 입력하지 말고 복사 아이콘을 사용하여 데이터베이스 탭에서 사용자 이름과 암호를 다시 복사하고 올바른 데이터베이스 이름에 연결하고 있는지 확인하세요.
MySQL에 도달하기 전에 "권한이 거부됨 (publickey)"입니다. 이는 데이터베이스가 아닌 SSH 레이어입니다. 사이트에 SSH 키 추가의 문제 해결 섹션을 따르세요.
다음 단계
- SFTP로 파일 업로드는 파일 전송을 위해 동일한 SSH 자격증명을 사용합니다.
- phpMyAdmin 사용으로 브라우저 기반 데이터베이스 작업을 수행합니다.
- 백업에서 복원하려면 쿼리가 의도한 것보다 더 멀리 이동했을 경우입니다.