DDEV при подключении к базе данных MySQL с промежуточного сервера с помощью туннеля SSH возвращает: невозможно назначить запрошенный адрес

Я разрабатываю проект TYPO3 локально в среде DDEV. Все разработчики хотят иметь доступ к одной и той же базе данных MySQL. Мы хотим добиться этого через туннель SSH к промежуточному серверу. К сожалению, мне не удается установить SSH-туннель к базе данных из DDEV.

Что я делаю?

ddev exec ssh -v -L 3306:127.0.0.1:3306 [email protected]

Возникающая ошибка:

debug1: Local forwarding listening on ::1 port 3306.
bind [::1]:3306: Cannot assign requested address

Также и с другими портами всегда одна и та же ошибка. Что мне нужно установить в DDEV, чтобы все заработало?

Спасибо за вашу поддержку!


person Eckonator    schedule 08.03.2021    source источник
comment
Совместное использование базы данных — необычная вещь, если только у вас нет огромного набора данных, доступных только для чтения. Но сначала поэкспериментируйте внутри веб-контейнера, не используйте ddev exec. Почему вы пытаетесь использовать туннель вместо прямого доступа к базе данных по имени хоста? И обратите внимание, что сервер базы данных ddev не находится на веб-сервере, поэтому в любом случае он не будет находиться на 127.0.0.1. Если вы можете сказать, почему вы пытаетесь использовать туннель, это поможет.   -  person rfay    schedule 08.03.2021


Ответы (2)


Проблема решена.

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

Итак, этот код работает нормально:

ddev exec ssh -v -4 -L 3308:127.0.0.1:3306 [email protected]

Спасибо за вашу помощь!

person Eckonator    schedule 08.03.2021

Как и в комментарии выше, я не знаю причин использовать туннель вместо прямого доступа к целевому серверу.

Но если вам нужно, ответ находится в https://www.electricmonk.nl/log/2014/09/24/ssh-port-forwarding-bind-cannot-assign-requested-address/ — вам нужно использовать ssh -4 -L 3306:127.0.0.1:3306 [email protected]

Обратите внимание, что в ddev сервер mariadb/mysql не работает внутри веб-контейнера, это отдельный контейнер, поэтому размещение вашего туннеля на 3306 в веб-контейнере, вероятно, в любом случае является ошибкой. Кроме того, что не нужен туннель.

Кроме того, sshd (на вашем сервере) по умолчанию не разрешает такое туннелирование, вы должны включить AllowTcpForwarding на сервере.

person rfay    schedule 08.03.2021
comment
Я думал, что путь через туннель SSH делает соединение значительно более защищенным от прослушивания по сравнению с прямым соединением. С точки зрения защиты данных я нашел способ более разумным. К сожалению, соединение с -4, которое принудительно использует IPv4, все еще не работает :-( Хороший намек на то, что Web и DB - это два отдельных контейнера. В конце концов, меня не волнует внутренняя база данных DDEV, я просто хочу работать с внешне подключенным база данных. - person Eckonator; 08.03.2021
comment
Использование ssh-туннеля шифрует соединение. Но mysql также может использовать зашифрованное соединение; однако я никогда не использовал это. Вы не говорите, что значит все еще не работает - я уверен, что у вас другие результаты. Чтобы поэкспериментировать с туннелями, нужно установить их вручную и протестировать. Есть много интернет-ресурсов, но это довольно сложно. Одна из основных причин, по которой у вас могут возникнуть проблемы, заключается в том, что на сервере должен быть установлен AllowTcpForwarding в его sshd_config, что не является значением по умолчанию. - person rfay; 09.03.2021