2 votes

Impossible de se connecter à MySQL sur EC2 via tunnel

Par mesure de sécurité, nous voulons nous connecter à MySQL en cours d'exécution sur EC2 via ssh. Nous avons d'autres serveurs où nous le faisons sans problème, mais pour une raison quelconque sur EC2, cela ne fonctionne pas. L'instance exécute Amazon Linux, MySQL est en version 5.5.42.

J'ai vérifié que l'utilisateur MySQL a les autorisations appropriées. J'ai ouvert le port 3306 dans les paramètres AWS et je peux me connecter à MySQL avec l'utilisateur et le mot de passe sans problème. Bien entendu, nous ne voulons pas laisser ce trou dans le pare-feu pour la production.

J'ai vérifié que l'utilisateur (actuellement en utilisant ec2-user pour les tests, j'utiliserai un utilisateur avec des autorisations restreintes pour la production) peut exécuter MySQL en ligne de commande sur EC2 et n'a aucun problème à établir une connexion SSH en utilisant la clé privée.

Voici la commande ssh que j'utilise pour établir le tunnel sur mon Mac:

ssh -nNT -L 3306:ADRESSEIP:3306 -i /chemin-vers/cle.pem ec2-user@ADRESSEIP

Ensuite, j'essaie de me connecter à MySQL. Cela reste bloqué. Si je ferme le tunnel, je reçois le message suivant:

Perte de connexion au serveur MySQL lors de la lecture du paquet de communication initial, erreur système : 0

Si je laisse le temps d'expiration, je reçois la même erreur de base:

Perte de connexion au serveur MySQL lors de la lecture du paquet de communication initial, erreur système : 35

et la commande ssh signale:

channel 2: ouverture impossible : échec de la connexion : délai d'attente de la connexion

Je tiens à préciser que j'utilise cette commande de base (moins la clé privée) pour établir des tunnels vers des serveurs non-EC2 avec succès tout le temps.

Si j'ajoute vvvv à la commande ssh, au moment où j'essaie de me connecter à MySQL jusqu'au moment d'expiration du délai, voici ce qui est rapporté:

debug1: Connexion au port 3306 pour la redirection vers le port 3306 vers l'ADRESSEIP demandée.
debug2: fd 7 réglage de TCP_NODELAY
debug3: fd 7 est O_NONBLOCK
debug3: fd 7 est O_NONBLOCK
debug1: canal 2: nouveau [direct-tcpip]
canal 2: ouverture impossible : échec de la connexion : délai d'attente de la connexion
debug2: canal 2: zombie
debug2: canal 2: collecte des déchets
debug1: canal 2: libération : direct-tcpip : écoute du port 3306 pour l'ADRESSEIP port 3306, connexion depuis l'adresse IP 127.0.0.1 port 49316, n canaux 3
debug3: canal 2: statut: Les connexions suivantes sont ouvertes :

J'ai également essayé d'utiliser un client appelé bitvise Tunnelier sous Windows et d'utiliser le pilote ODBC MySQL pour les tests et j'obtiens les mêmes résultats - lorsque je ferme le tunnel, je reçois le même message d'erreur, ce qui me conduit à conclure que le problème vient du serveur.

J'ai essayé quelques suggestions que j'ai trouvées concernant l'ajout de skip-networking à my.cnf et l'ajout de mysqld:ALL:ALLOW et mysqld-max:ALL:ALLOW à /etc/hosts.allow sans changements de comportement.

Je suis complètement perdu à ce stade. Je ne sais pas si c'est un problème de MySQL, un problème de SSH ou un autre problème de réseau EC2.

4voto

Michael - sqlbot Points 21488

Vous ne voulez pas essayer de connecter la connexion tunnellisée au port 3306 de l'adresse IP publique de l'instance EC2, et il semble que c'est ce que vous faites.

Sur EC2, les machines ont des adresses IP privées liées à leur pile IP, et le matériel réseau AWS effectue un NAT 1:1 pour attacher l'adresse IP publique. Il ne fera pas de NAT sur vous-même, d'où le timeout.

Utilisez -L 3306:127.0.0.1:3306. SSH sait que vous ne voulez pas dire votre interface rollback locale, mais celle du système distant. Ou utilisez l'adresse IP privée du système distant, que vous pouvez trouver dans la console AWS, ou avec ifconfig sur l'instance elle-même.

-1voto

uldo Points 1

Vérifiez votre groupe de sécurité EC2 s'il a le port 3306 ouvert au moins pour votre adresse IP. Si ce n'est pas le cas, ajoutez-le et réessayez.

Cliquez sur l'instance et sur Description vous verrez "Groupes de sécurité" cliquez sur le nom du groupe de sécurité, puis Inbound > Modifier et là vous devriez avoir l'option d'ouvrir les ports.

2 votes

Cela ne traite pas de ce qui est tenté, qui est de se connecter à MySQL via un tunnel ssh, et ssh lui-même fonctionne. Il n'est pas nécessaire dans ce cas d'ouvrir le port 3306 dans le groupe de sécurité.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X