Подключение к MariaDB через SSH с использованием сокет-файла вместо TCP соединения

Подключение к удаленной MariaDB через файл сокета с использованием SSH

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

Преамбула: Установка

В качестве примера давайте возьмем два сервера MariaDB: my-mariadb-server1 и my-mariadb-server2, работающие на Debian и Ubuntu. Эти серверы используют стандартное подключение к файлу сокета без пароля. Для установки соединения вы можете воспользоваться следующими командами:

$ ssh root@my-mariadb-server1
# sudo mysql

Или с указанием конкретного сокета:

$ ssh root@my-mariadb-server1
# sudo mysql --socket=/var/run/mysqld/mysqld.sock

Эти команды работают благодаря тому, что MariaDB слушает как на сокете, так и на стандартном порту, и файл сокета доступен.

Как настроить туннелирование SSH для MariaDB

Основная идея для подключения заключается в том, чтобы перенаправить удаленный сокет MariaDB на локальный. Вот пример команды, которая делает это:

rm /tmp/mylocalsock1
ssh root@my-mariadb-server1 -L /tmp/mylocalsock1:/var/run/mysqld/mysqld.sock sleep 1000

Аналогично можно сделать с другим сервером:

rm /tmp/mylocalsock2
ssh root@my-mariadb-server2 -L /tmp/mylocalsock2:/var/run/mysqld/mysqld.sock sleep 1000

После этого вы можете подключиться к удаленным серверам:

mysql --socket=/tmp/mylocalsock1 -u root
mysql --socket=/tmp/mylocalsock2 -u root

Эти команды успешно достигают ваших удаленных серверов MariaDB.

Устранение ошибок аутентификации

Важно отметить, что вы можете столкнуться с ошибками аутентификации. Например, когда вы пытаетесь войти через SSH:

$ ssh root@my-mariadb-server1
# journalctl -xfu mariadb
[Warning] Access denied for user 'root'@'localhost' (using password: NO)

Эта ошибка связана с тем, что для успешного подключения необходимо, чтобы локальное имя пользователя UNIX совпадало с удаленным именем пользователя MariaDB. Если вы пытаетесь подключиться как root, то ваш локальный пользователь также должен быть root.

Инструкция по подключению к MariaDB через файл сокета

Для успешного подключения выполните следующие шаги:

  1. Убедитесь, что локальный и удаленный пользователи совпадают.
  2. Используйте команду для создания локального файла сокета, который будет связываться с удаленным:
rm -f /tmp/mylocalsock1
ssh root@my-mariadb-server1 -L /tmp/mylocalsock1:/var/run/mysqld/mysqld.sock sleep 1000
  1. Откройте новое подключение к удаленному MariaDB:
sudo mysql --socket=/tmp/mylocalsock1

Таким образом, вы получите доступ к вашей удаленной базе данных MariaDB без необходимости вводить пароль.

Как это работает

Подключение через сокет использует плагин аутентификации UNIX_SOCKET, который проверяет соответствие UID процесса. Это позволяет серверу MariaDB идентифицировать пользователя на основе его локального UNIX-имени. Для более подробной информации вы можете ознакомиться с документацией по аутентификации в MariaDB.

Рекомендации по безопасности

При создании файла сокета стоит обратить внимание на его разрешения. Рекомендуется использовать следующие команды сразу после создания файла сокета:

chmod 600 /tmp/mylocalsock1
chown root:root /tmp/mylocalsock1

Это позволит защитить файл сокета от несанкционированного доступа.

Заключение

Использование SSH для подключения к удаленной MariaDB через файл сокета — это мощный и безопасный метод работы с удаленными базами данных. Обеспечив правильное соответствие между пользователями и удостоверившись в правильных настройках, вы сможете эффективно управлять своими удаленными серверами.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *