Сайты

Подключение к вашей базе данных через туннель 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…

Подключение к вашей базе данных через SSH туннель

Сервер MySQL вашего сайта прослушивает только адрес обратной связи сервера, поэтому настольное приложение, такое как TablePlus, Sequel Ace, DBeaver или MySQL Workbench, не может подключиться к нему напрямую. SSH туннель предоставляет этим приложениям локальный порт, который перенаправляется на базу данных. Это позволяет получить удобный графический интерфейс для работы с данными без открытия MySQL в интернет.

Почему туннель необходим

Откройте Websites, нажмите на сайт, затем Files, затем Database. Карточка Connection details показывает хост как 127.0.0.1 и порт как 3306. Это не заполнитель: база данных действительно принимает подключения только с машины, на которой она запущена. Ничто в открытом интернете не может достичь порт 3306, что исключает целый класс атак.

SSH туннель безопасно закрывает этот пробел. Ваш SSH клиент открывает порт на вашем ноутбуке, шифрует всё, что вы туда отправляете, и передаёт это базе данных изнутри сервера, ровно так, как если бы локальный процесс подключился.

Вкладка Database, показывающая детали подключения в KPanel

Что вам нужно в первую очередь

Туннель это SSH подключение, поэтому вам нужен SSH ключ, зарегистрированный на сайте, перед тем как всё это будет работать. Сначала выполните Добавление SSH ключей на сайт, затем вернитесь сюда.

Соберите четыре вещи:

  • SSH хост, порт и имя пользователя, из Files, затем SSH Keys, в карточке Connection details.
  • Имя базы данных, имя пользователя и пароль, из Files, затем Database. Нажмите на значок глаза, чтобы показать пароль, и на значок копирования, чтобы поместить его в буфер обмена.

Если вкладка Database показывает No database provisioned for this site type, то этот сайт не имеет базы данных. Статические сайты и некоторые сайты на Node.js создаются без базы данных.

Открытие туннеля из терминала

Общая схема: перенаправить локальный порт на 127.0.0.1:3306 с другой стороны SSH подключения.

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 на вашем ноутбуке является базой данных сайта.

Используйте локально 3307 вместо 3306. Если на вашей машине установлен MySQL или MariaDB, он уже использует 3306, и туннель не сможет привязаться с ошибкой "address already in use". Подойдёт любой свободный локальный порт.

Указание клиенту базы данных адреса туннеля

В вашем графическом клиенте создайте обычное MySQL подключение с этими значениями:

ПолеЗначение
Host127.0.0.1
Port3307 (какой бы локальный порт вы ни перенаправили)
UserUsername из вкладки Database
PasswordPassword из вкладки Database
DatabaseИмя Database из вкладки Database

Не указывайте SSH хост в поле Host. Насколько клиент знает, он разговаривает с базой данных на вашей собственной машине.

Клиенты со встроенной вкладкой SSH

TablePlus, Sequel Ace, DBeaver и MySQL Workbench могут все управлять туннелем самостоятельно, что позволяет не держать терминал открытым. Заполните две группы полей:

  • SSH раздел: хост, порт, имя пользователя и файл приватного ключа со страницы SSH Keys.
  • Database раздел: хост 127.0.0.1, порт 3306, плюс имя базы данных, пользователя и пароль из вкладки Database.

Когда клиент создаёт туннель, используйте 3306 в разделе database вместо вашего локального перенаправленного порта. Клиент подключается с точки зрения сервера, поэтому видит реальный порт.

Использование phpMyAdmin вместо этого

Если вам просто нужно быстро посмотреть таблицу, туннель вам не нужен вообще. Вкладка Database имеет карточку phpMyAdmin с кнопкой Open 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.

Устранение неполадок

"Address already in use" при открытии туннеля. Что то на вашей машине уже находится на этом локальном порту. Выберите другой, например -L 3399:127.0.0.1:3306, и измените порт в вашем клиенте соответственно.

"Connection refused" от клиента базы данных. Туннель не открыт. Проверьте, что SSH терминал всё ещё работает и не вывел ошибку, и что порт в вашем клиенте совпадает с локальным портом в аргументе -L.

SSH подключается, но клиент всё равно тайм-аутит. Подтвердите, что вы перенаправили на 127.0.0.1:3306 и не на общедоступное имя хоста. Перенаправление на общедоступное имя просит сервер достичь базу данных через интернет, что именно то, что заблокировано.

"Access denied for user". SSH вход прошёл успешно, но учётные данные MySQL неправильны. Скопируйте имя пользователя и пароль снова из вкладки Database, используя значки копирования вместо ввода вручную, и проверьте, что вы подключаетесь к правильному имени базы данных.

Permission denied (publickey) перед тем как достичь MySQL. Это слой SSH, а не база данных. Работайте через раздел устранения неполадок в Добавление SSH ключей на сайт.

Что дальше

Вам всё ещё нужна помощь?

Напишите нам на support@kapsulehost.com или откройте чат в KPanel.

Открыть KPanel
Подключение к вашей базе данных через туннель SSH