Перейти к содержимому
Перейти в KPanelПерейти в KPanel
Содержание
Сайты

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

Машинный перевод. Английский оригинал доступен.

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

Зачем нужен туннель

Откройте Сайты, нажмите на сайт, затем База данных. Карточка Данные для подключения показывает хост как 127.0.0.1 и порт как 3306. Это не формальность: база данных действительно принимает подключения только с той машины, на которой она работает. Ничто из публичного интернета не может достучаться до порта 3306, что полностью устраняет целый класс атак.

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

Вкладка «База данных» с данными для подключения в KPanel

Что нужно сначала

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

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

  • Хост, порт и имя пользователя SSH, из раздела Настройки, затем SSH-ключи, в карточке Данные для подключения.
  • Имя базы данных, имя пользователя и пароль, из раздела База данных. Нажмите на значок глаза, чтобы увидеть пароль, и на значок копирования, чтобы скопировать его в буфер обмена.

Если на вкладке «База данных» написано 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 на интерфейсе loopback сервера.
  • -N означает «не запускать оболочку, просто держать туннель открытым».
  • Добавьте -i /path/to/key, если ключ для этого сайта отличается от вашего ключа по умолчанию.

Оставьте это окно терминала запущенным. Пока оно открыто, 127.0.0.1:3307 на вашем ноутбуке и есть база данных сайта.

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

Настройка клиента базы данных на туннель

В вашем графическом клиенте создайте обычное 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

Ручной дамп, это удобная копия, а не стратегия резервного копирования. Она актуальна лишь на момент создания и хранится на том ноутбуке, с которого вы её сделали. KapsuleHost уже выполняет автоматическое ежедневное резервное копирование сайта с хранением в течение 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 неверны. Скопируйте имя пользователя и пароль заново со вкладки «База данных» с помощью значков копирования, а не вводите их вручную, и проверьте, что вы подключаетесь к правильной базе данных.

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

Куда двигаться дальше

Это было полезно?

Вы ИИ? Читайте эту страницу в Markdown

Похожие статьи

Подключение через SFTP: FileZilla, Cyberduck и командная строкаSFTP (Secure File Transfer Protocol, защищённый протокол передачи файлов) даёт вам прямой доступ к файлам вашего сайта на сервере.…SSL-сертификаты и HTTPSЭта статья простым языком объясняет, что такое SSL, как KapsuleHost автоматически обеспечивает SSL для ваших сайтов, и что делать, если с вашим сертификатом что…Сайты: с чего начатьКак работает хостинг сайтов в KapsuleHost, что находится на каждой вкладке сайта и какое руководство читать для конкретной задачи.…Мониторинг доступности сайтаКаждый сайт на KapsuleHost автоматически проверяется каждые 60 секунд, и вкладка Uptime показывает результат: текущий статус, процент времени безотказной работы…

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

Спросите Kora, она знает ваш аккаунт, или свяжитесь с нашей командой.

Связаться с намиНаписать в поддержку