Назад | Перейти на главную страницу

Не удается подключиться к MySQL на EC2 через туннель

По соображениям безопасности мы хотим подключиться к MySQL, работающему на EC2, через ssh. У нас есть другие серверы, на которых мы делаем это без проблем, но по какой-то причине на EC2 это не работает. Инстанс работает под управлением Amazon Linux, MySQL - 5.5.42.

Я убедился, что у пользователя MySQL есть соответствующие разрешения. Я открыл 3306 в настройках AWS, и я могу без проблем подключиться к MySQL с именем пользователя и паролем. Очевидно, мы не хотим, чтобы эта дыра в брандмауэре производилась.

Я подтвердил, что пользователь (в настоящее время использующий ec2-user для тестирования, будет использовать пользователя с ограниченными разрешениями для производства) может запускать MySQL из командной строки на EC2 и не имеет проблем с установкой SSH-соединения с использованием закрытого ключа.

Это команда ssh, которую я использую для создания туннеля на моем Mac:

ssh -nNT -L 3306:IPADDRESS:3306 -i /path-to/key.pem ec2-user@IPADDRESS

Затем я пытаюсь подключиться к MySQL. Просто зависает. Если я убью туннель, я получаю следующее сообщение:

Lost connection to MySQL server at 'reading initial communication packet', system error: 0

Если я выдержу время, я получу ту же основную ошибку:

Lost connection to MySQL server at 'reading initial communication packet', system error: 35

и команда ssh сообщает:

channel 2: open failed: connect failed: Connection timed out

Я должен отметить, что я использую эту базовую команду (за вычетом закрытого ключа) для установки туннелей к серверам, отличным от EC2, и все время успешно.

Если я добавлю vvvv в команду ssh, в момент, когда я попытаюсь подключиться к MySQL, до точки тайм-аута, это то, что сообщается:

debug1: Connection to port 3306 forwarding to IPADDRESS port 3306 requested.
debug2: fd 7 setting TCP_NODELAY
debug3: fd 7 is O_NONBLOCK
debug3: fd 7 is O_NONBLOCK
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection timed out
debug2: channel 2: zombie
debug2: channel 2: garbage collecting
debug1: channel 2: free: direct-tcpip: listening port 3306 for IPADDRESS port 3306, connect from 127.0.0.1 port 49316, nchannels 3
debug3: channel 2: status: The following connections are open:

Я также пробовал использовать клиент под названием bitvise Tunnelier в Windows и использовать драйвер MySQL ODBC для тестирования, и я получаю те же результаты - когда я убиваю туннель, я получаю то же сообщение об ошибке, что приводит меня к выводу, что проблема в сервер.

Я пробовал некоторые предложения, которые я нашел, относительно добавления skip -etwork в my.cnf и добавления mysqld: ALL: ALLOW и mysqld-max: ALL: ALLOW в /etc/hosts.allow с некоторыми изменениями в поведении.

На данный момент я в полной растерянности. Я не знаю, проблема ли это MySQL, проблема SSH или какая-то другая проблема с сетью EC2.

Вы не хотите пытаться подключить туннельное соединение к порту 3306 экземпляра EC2. общественный IP-адрес, и это похоже на то, что вы делаете.

В EC2 машины имеют частный IP-адреса привязаны к их IP-стеку, а сетевое оборудование AWS выполняет NAT 1: 1 для подключения общедоступного IP-адреса. Он не будет использовать NAT для себя, отсюда и таймаут.

Использовать -L 3306:127.0.0.1:3306. SSH знает, что вы имеете в виду не локальный интерфейс отката, а удаленную систему. Или используйте частный IP-адрес удаленной системы, который вы можете найти в консоли AWS, или с помощью ifconfig на самом экземпляре.

Проверьте свою группу безопасности EC2, если в ней открыт порт 3306 хотя бы для вашего IP. Если не добавит, попробуйте еще раз.

Щелкните экземпляр и в разделе «Описание» вы увидите «Группы безопасности», щелкните имя группы безопасности, а затем «Входящие»> «Изменить», и там у вас должна быть возможность открыть порты.