Заставьте MySQL использовать перенаправленный TCP-порт
Избегайте выбора локального Unix-сокета, когда клиент MySQL должен подключаться через SSH TCP-перенаправление.
SSH-перенаправление слушает локальный порт 13306, но mysql всё равно подключается к локальной базе данных—или сообщает, что его локальный сокет отсутствует. В Unix клиент MySQL, которому указан localhost, может выбрать Unix-сокет вместо TCP. Указание порта не обязательно меняет этот выбор.
Для существующего одобренного TCP-перенаправления сделайте протокол явным:
mysql --protocol=TCP --host=127.0.0.1 --port=13306 \
--user=dbuser --password
Имя пользователя приведено для примера; параметр пароля запрашивает интерактивный ввод. Команда подключается к локальному TCP-слушателю вместо Unix-сокета.
Держите два входа отдельно
Фиксированный SSH-маршрут может иметь такую форму:
ssh -N -L 127.0.0.1:13306:db.internal:3306 [email protected]
SSH-сервер шлюза достигает db.internal:3306. Затем MySQL аутентифицирует учётную запись базы данных через этот поток байтов. Принятый SSH-ключ не даёт входа в базу данных, а ограничения источника базы данных видят соединение приходящим с той стороны маршрута.
Это фиксированный TCP-адаптер, а не настройка SOCKS, которую использует mysql. Приложению не нужны SOCKS-переговоры, потому что конечная точка перенаправления имеет одну заранее заданную цель.
Сохраняйте предполагаемую идентичность TLS базы данных и политику сертификатов там, где они используются. Подключение сокета к loopback не делает сертификат базы данных действительным для другого имени службы. Успешное локальное TCP-соединение решает выбор транспорта, а не последующую аутентификацию базы данных или проверки TLS.