Если база данных размещена на сервере, напрямую подключиться к ней с компьютера можно не всегда. Например, доступ к порту может быть закрыт для внешних подключений в целях безопасности. SSH-туннель создаёт зашифрованный канал между компьютером и сервером, через который передаётся соединение с базой данных.
Простыми словами, SSH-туннель — это защищённое соединение между компьютером и сервером, через которое можно передавать данные к сервису, недоступному из сети напрямую.
Когда нужен удалённый доступ через SSH-туннель?
SSH-туннель используют, когда нужно получить удалённый доступ к базе данных, но при этом не открывать порт для подключений из общедоступной сети.
Например:
- база данных доступна только с самого сервера;
- внешний доступ к MySQL закрыт;
- нужно временно подключиться к рабочей базе данных с компьютера разработчика или администратора;
- доступ к базе разрешён только через защищённое SSH-соединение.
Преимущества и особенности подключения через SSH-туннель
1. Безопасность
Данные между компьютером и сервером передаются через зашифрованный канал. При этом порт базы данных не обязательно делать общедоступным.
2. Простота подключения
После создания туннеля программа для работы с базой данных подключается к указанному локальному порту. Не нужно отдельно настраивать подключение к удалённому адресу.
3. Свободный локальный порт
Если его уже занимает другая программа или другой туннель, подключение не заработает. В этом случае можно выбрать другой свободный локальный порт.
4. Белорусский IP-адрес
SSH-доступ к серверу разрешён только с белорусских IP-адресов. Если VPN меняет ваш IP-адрес на адрес другой страны, подключение будет отклонено. В этом случае отключите VPN или используйте подключение с разрешённым IP-адресом.
Как настроить SSH-туннель в Windows?
Шаг 1. Для начала необходимо создать пару SSH-ключей — они используются для подтверждения личности пользователя. Закрытый (приватный) ключ остаётся у вас на компьютере, и его нельзя никому передавать. Открытый (публичный) ключ нужен для доступа к серверу.
Команды выполняются в командной строке Windows на вашем компьютере. Для генерации SSH-ключа используйте следующую (вместо выделенного текста подставьте ваш e-mail):
ssh-keygen -t ed25519 -C "your_email@example.com"
Нажмите Enter.
Шаг 2. Далее система спросит, куда сохранить ключ: Enter file in which to save the key. А также предложит стандартный вариант: C:\Users\имя_пользователя\.ssh\id_ed25519. Можете оставить этот путь. Нажмите Enter.
Шаг 3. Далее появится сообщение: Enter passphrase (empty for no passphrase) — придумайте парольную фразу (можно оставить поле пустым). Нажмите Enter. Система попросит подтверждение: Enter same passphrase again — введите ту же фразу ещё раз. Снова нажмите Enter.
Важно: в целях безопасности рекомендуем указать парольную фразу и сохранить её в надёжном месте.
Если появилось сообщение Your public key has been saved in … (Ваш публичный ключ сохранён в …), а также отпечаток ключа и его графическое представление, значит вы всё сделали правильно.
Перейдите в папку Users (Пользователи) на диске С, далее в папку с именем пользователя. В ней появится каталог .ssh, который будет содержать пару ключей.
Шаг 4. Войдите в панель управления ISPmanager. Перейдите в раздел «Менеджер файлов». В домашней директории пользователя найдите папку .ssh и откройте её.
После генерации SSH-ключа необходимо добавить публичный ключ на сервер в файл authorized_keys пользователя, под которым будет выполняться SSH-подключение. Если такого файла в данной папке нет, его необходимо создать:
Публичный ключ можно посмотреть в файле id_ed25519.pub на вашем устройстве. Скопируйте и вставьте его в файл. Нажмите «Сохранить и закрыть».
Шаг 5. Теперь можно подключать туннель. Вернитесь в командную строку. Команда для подключения:
ssh -fN -L 3306:localhost:3306 имя_пользователя_ispmanager@ip-адрес_сервера,
где первое значение — локальный порт на компьютере, а второе — порт MySQL на сервере (в примере используется стандартный — 3306).
Важно: если вы сохранили ключи в папке, отличающейся от стандартной, добавьте к команде параметр -i и путь к закрытому ключу: ssh -i /путь/к/ключу -fN -L 3306:localhost:3306 имя_пользователя_ispmanager@ip-адрес_сервера.
Нажмите Enter. При первом подключении SSH может показать сообщение о том, что подлинность сервера не подтверждена, и попросить продолжить подключение. Введите yes и снова нажмите Enter.
Шаг 6. После запуска команды может не появиться никаких сообщений. Это нормально: команда запускает SSH-туннель и не открывает отдельную сессию командной строки.
Проверить, работает ли туннель, можно с помощью следующей команды:
netstat -ano | findstr :3306
Её лучше ввести в новом окне командной строки:
Если в результате отображается LISTENING, значит указанный локальный порт прослушивается и SSH-туннель запущен. Теперь можно подключиться к базе данных через программу-клиент.
Как настроить SSH-туннель в Linux?
Настройка SSH-туннеля в Linux выполняется по тому же принципу, что и в Windows. Отличаются только отдельные команды для работы в терминале.
Шаги 1–5 аналогичны тем, что мы описали выше:
- создайте пару SSH-ключей;
- укажите путь для сохранения;
- придумайте парольную фразу;
- добавьте публичный ключ на сервер в ISPmanager;
- запустите SSH-туннель.
Для проверки подключения в Linux необходимо будет выполнить другую команду:
ss -tlnp | grep 3306
Если туннель запущен, в результате появится строка с локальным портом 3306 и состоянием LISTEN. Это означает, что порт прослушивается и SSH-туннель работает.
Как подключиться к базе данных через SSH-туннель?
Необходимо ввести следующие данные в программе-клиенте:
- Хост: localhost
- Порт: 3306
- Имя базы данных: имя вашей БД
- Логин: имя пользователя БД
- Пароль: пароль пользователя БД
Важно: для подключения к базе данных используются учётные данные пользователя БД, а не логин и пароль от ISPmanager или SSH.
Вывод
Таким образом, SSH-туннель позволяет работать с базой данных на сервере через локальную программу, не открывая порт базы данных для внешних подключений. Для этого достаточно настроить SSH-доступ, добавить публичный ключ на сервер и создать туннель с помощью команды SSH.
После запуска туннеля программа для работы с базой данных подключается к локальному адресу и указанному порту, а SSH передаёт соединение на сервер. Пока туннель работает, базой данных можно пользоваться через настроенный клиент.
Читайте также: