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.

Похожие статьи