Подключение к удаленной 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 через файл сокета
Для успешного подключения выполните следующие шаги:
- Убедитесь, что локальный и удаленный пользователи совпадают.
- Используйте команду для создания локального файла сокета, который будет связываться с удаленным:
rm -f /tmp/mylocalsock1
ssh root@my-mariadb-server1 -L /tmp/mylocalsock1:/var/run/mysqld/mysqld.sock sleep 1000
- Откройте новое подключение к удаленному MariaDB:
sudo mysql --socket=/tmp/mylocalsock1
Таким образом, вы получите доступ к вашей удаленной базе данных MariaDB без необходимости вводить пароль.
Как это работает
Подключение через сокет использует плагин аутентификации UNIX_SOCKET, который проверяет соответствие UID процесса. Это позволяет серверу MariaDB идентифицировать пользователя на основе его локального UNIX-имени. Для более подробной информации вы можете ознакомиться с документацией по аутентификации в MariaDB.
Рекомендации по безопасности
При создании файла сокета стоит обратить внимание на его разрешения. Рекомендуется использовать следующие команды сразу после создания файла сокета:
chmod 600 /tmp/mylocalsock1
chown root:root /tmp/mylocalsock1
Это позволит защитить файл сокета от несанкционированного доступа.
Заключение
Использование SSH для подключения к удаленной MariaDB через файл сокета — это мощный и безопасный метод работы с удаленными базами данных. Обеспечив правильное соответствие между пользователями и удостоверившись в правильных настройках, вы сможете эффективно управлять своими удаленными серверами.