Подключение к базе данных из внешнего клиента (DBeaver/Navicat) через туннель
Дата публикации: 24.04.2026

Подключение к базе данных из внешнего клиента (DBeaver/Navicat) через туннель

ccb9a536


Подключение к базе данных через SSH-туннель: Безопасный доступ из DBeaver/Navicat

Вы когда-нибудь пытались зайти в банковский сейф через уличную дверь, а не через бронированный вход? Так же глупо подключаться к базе данных напрямую, минуя SSH-туннель — это как оставлять ключи от сервера под ковриком. В этом уроке вы научитесь настраивать безопасное удалённое подключение к MySQL/PostgreSQL через DBeaver или Navicat, используя проброс портов по SSH. Это защитит ваши данные от перехвата и даст доступ к базам, которые "спрятаны" за фаерволом.


Почему нельзя подключаться напрямую?

Представьте, что ваша база данных — это дом с окнами:

  • Прямое подключение (без туннеля) = окна открыты, и любой может заглянуть или пробраться внутрь.
  • Подключение через SSH-туннель = все окна закрыты, а вход только через секретный лаз (зашифрованный канал).
Уязвимость Риск без SSH-туннеля Решение с SSH-туннелем
Перехват трафика Логины/пароли и данные могут быть украдены (MITM-атака) Все данные шифруются по SSH
Блокировка фаерволом Порт базы (3306/5432) закрыт для внешнего мира Туннель использует порт 22 (SSH), который обычно открыт
Атаки на слабые пароли Брутфорс по открытому порту Аутентификация по SSH-ключу + паролю

Важно: Многие хостеры (например, AWS RDS, DigitalOcean) по умолчанию запрещают внешние подключения к базам. SSH-туннель — единственный безопасный способ обойти это ограничение.


Что такое SSH-туннель и как он работает?

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

Аналогия с почтовой службой

  1. Вы отправляете письмо (запрос к базе) в конверте.
  2. Вместо того чтобы бросить его в почтовый ящик напрямую (риск потерять), вы отдаёте его курьеру (SSH).
  3. Курьер относит письмо в секретный почтовый отдел (ваш сервер) и возвращает ответ тем же путём.

Схема работы

[Ваш компьютер] ←(локальный порт 3307)→ [SSH-туннель] ←(порт 22)→ [Ваш сервер] ←(порт 3306)→ [База данных]
  • Локально вы подключаетесь к 127.0.0.1:3307 (например), но на самом деле трафик идёт через SSH на сервер, а оттуда — в базу.

Подготовка: Что вам понадобится

Перед настройкой убедитесь, что у вас есть:

  1. SSH-доступ к серверу (логины/пароль или приватный ключ).
  2. Установленный DBeaver/Navicat (или другой SQL-клиент).
  3. Права на подключение к базе (имя пользователя, пароль, имя базы).
  4. Открытый порт 22 на сервере (проверьте фаервол: sudo ufw status).

Совет: Если вы используете AWS EC2, убедитесь, что в Security Group разрешён входящий трафик на порт 22 (SSH) с вашего IP.


Шаг 1: Создание SSH-туннеля вручную (для понимания)

Прежде чем настраивать DBeaver, давайте создадим туннель через терминал (Linux/macOS) или PuTTY (Windows). Это поможет понять механику.

Для Linux/macOS (Terminal)

ssh -L 3307:localhost:3306 пользователь@ваш_сервер -N
  • -L 3307:localhost:3306 — пробрасываем локальный порт 3307 на 3306 (MySQL) на сервере.
  • пользователь@ваш_сервер — ваши SSH-креды.
  • -N — не выполнять команды, только туннель.

Пример: Если база на другом хосте (не localhost), используйте:

ssh -L 3307:10.0.0.2:3306 пользователь@ваш_сервер -N

где 10.0.0.2 — внутренний IP сервера с базой.

Для Windows (PuTTY)

  1. Откройте PuTTY.
  2. Введите хост и порт (22) в Session.
  3. Перейдите в Connection → SSH → Tunnels.
  4. В поле Source port введите 3307.
  5. В поле Destination введите localhost:3306 (или 10.0.0.2:3306, если база на другом сервере).
  6. Нажмите Add, затем Open.
  7. Введите логин/пароль от SSH.

Проверка: После создания туннеля откройте новый терминал и выполните:

telnet 127.0.0.1 3307

Если соединение установлено — туннель работает!


Шаг 2: Настройка подключения в DBeaver

Теперь настроим DBeaver (аналогично для Navicat).

1. Создайте новое подключение

  • Откройте DBeaver → Создать подключение → Выберите MySQL (или PostgreSQL).
  • Вкладка Основное:
    • Хост: localhost (или 127.0.0.1).
    • Порт: 3307 (тот, что пробросили в туннеле).
    • База данных: имя вашей базы.
    • Пользователь/пароль: данные от базы (не от SSH!).

2. Настройка SSH-туннеля в DBeaver

  • Перейдите на вкладку SSH.
  • Отметьте галочку Use SSH tunnel.
  • Заполните поля:
    • SSH Host: IP или домен вашего сервера.
    • SSH Port: 22.
    • User: ваш SSH-пользователь (например, root или ubuntu).
    • Authentication Method:
    • Password — если используете пароль.
    • Public Key — если подключаетесь по ключу (рекомендуется!).
      • Укажите путь к приватному ключу (например, ~/.ssh/id_rsa).
    • Local Port: 3307 (должен совпадать с портом в подключении к базе).

Важно: Если база находится не на том же сервере, где SSH, укажите Remote Host (например, 10.0.0.2) и Remote Port (3306).

3. Тестирование подключения

  • Нажмите Test Connection.
  • Если всё настроено верно — увидите сообщение "Success".
  • Нажмите Finish и подключитесь к базе.

Шаг 3: Настройка в Navicat

Процесс аналогичен DBeaver, но с небольшими отличиями.

  1. Создайте новое подключение (MySQL/PostgreSQL).
  2. В поле Host укажите 127.0.0.1, порт — 3307.
  3. Перейдите на вкладку SSH.
  4. Включите Use SSH Tunnel и заполните:
    • SSH Host: IP вашего сервера.
    • Port: 22.
    • User: SSH-пользователь.
    • Authentication: выберите Password или Public Key.
  5. Нажмите Test ConnectionOK.

Шаг 4: Автоматизация (опционально)

Чтобы не создавать туннель вручную каждый раз, можно:

  1. Сохранить сессию в PuTTY (для Windows).
  2. Использовать autossh (Linux/macOS) для автоматического переподключения:
    autossh -M 0 -f -N -L 3307:localhost:3306 пользователь@ваш_сервер
  3. Настроить запуск туннеля при старте системы (через cron или systemd).

Распространённые ошибки и их решение

Ошибка Причина Решение
"Connection refused" при тесте в DBeaver Туннель не создан или порт занят Проверьте, запущен ли SSH-туннель (netstat -tulnp \| grep 3307)
"Access denied for user" Неправильные креды к базе Убедитесь, что пользователь имеет права на подключение с localhost
"SSH connection failed" Неправильный ключ/пароль Проверьте путь к ключу или пароль от SSH
"Port 22: Connection timed out" Фаервол блокирует SSH Разрешите порт 22 в фаерволе (sudo ufw allow 22)
"Host key verification failed" Изменился SSH-ключ сервера Удалите старый ключ из ~/.ssh/known_hosts

Безопасность: 5 правил для защиты

  1. Отключите подключение к базе извне:
    -- Для MySQL
    DROP USER 'user'@'%';
    CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
  2. Используйте SSH-ключи, а не пароли.
  3. Закройте ненужные порты в фаерволе:
    sudo ufw deny 3306  # Для MySQL
    sudo ufw allow 22   # Только SSH
  4. Настройте fail2ban для защиты от брутфорса:
    sudo apt install fail2ban
    sudo systemctl enable fail2ban
  5. Используйте нестандартный SSH-порт (опционально):
    sudo nano /etc/ssh/sshd_config  # Измените Port 22 на Port 2222
    sudo systemctl restart sshd

Практика для закрепления

Упражнение 1: Теория

  1. Почему подключение к базе через SSH-туннель безопаснее, чем напрямую?
  2. Какие порты задействованы в схеме: [Локальный компьютер] → [SSH-туннель] → [Сервер с базой]?
  3. Что такое -L в команде ssh -L 3307:localhost:3306...?

Упражнение 2: Настройка вручную

  1. Создайте SSH-туннель через терминал (или PuTTY) для подключения к тестовой базе.
  2. Проверьте его работу с помощью telnet 127.0.0.1 3307.
  3. Подключитесь к базе через mysql -u пользователь -p -h 127.0.0.1 -P 3307.

Упражнение 3: DBeaver/Navicat

  1. Настройте подключение к базе через SSH-туннель в DBeaver.
  2. Экспортируйте структуру одной из таблиц в SQL-файл.
  3. Создайте нового пользователя в базе с правами только на чтение (GRANT SELECT...).

Упражнение 4: Диагностика

  1. Предположим, при тесте подключения вы видите ошибку:
    SSH connection failed: Authentication failed.

    Перечислите возможные причины и способы их устранения.

Упражнение 5: Безопасность

  1. Напишите команду для фаервола (ufw), которая:
    • Закроет доступ к MySQL (порт 3306) для всех, кроме localhost.
    • Откроет SSH (порт 22) только для вашего IP (например, 123.123.123.123).

Итоги

  • Вы научились безопасно подключаться к базе через SSH-туннель, минуя блокировки фаервола.
  • Теперь вы можете управлять базами на AWS RDS, DigitalOcean, VPS без риска перехвата данных.
  • SSH-туннель — это ваш "секретный лаз" в мир защищённых подключений.

Дополнительный материал:


Генератор паролей с длинной 64 символа
Женская одежда с бахромой
Кадастровые работы в Бийске
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать планировку сайта для блогов на DreamHost
Как выбрать Vdsina вечный хостинг для своего проекта
Казань окна VEKA - профессионализм и опыт
Курьерская вода
Новостройки Оренбурга: недвижимость с отличной ценой
Онлайн чат-партнерство
Пиломатериалы для возведения бани
Почему VDSina — лучший выбор хостинга
Секреты Вконтакте: тонкости и хитрости
Скидки до 50% на тур в Коста-Рике
Видеочат рулетка бесплатно
рейтинг хостингов 2026 Быстрые VDS серверы