Essayer d'utiliser MySQL Workbench avec TCP / IP sur SSH - échec de la connexion

41

Je ne parviens pas à me connecter via TCP / IP sur SSH dans MySQL Workbench à partir d'un PC. Que se passe-t-il?

J'ai créé une base de données MySQL 5.1 sur un serveur Ubuntu, mysql.myhost.com . Je peux y accéder localement. MySQL Workbench (PC) offre l’établissement d’une connexion via TCP sur ssh. Il fonctionne sur le port 3306 sur le serveur distant où mysql en ligne de commande fonctionne correctement.

J'ai utilisé les détails de la session suivants:

  • Méthode de connexion: TCP / IP sur SSH.
  • Nom d'hôte SSH: mysql.myhost.com : 3306
  • Nom d'utilisateur SSH: mon login linux
  • Fichier de clé publique SSH: mon fichier de clé publique locale
  • Nom d'hôte MySQL: 127.0.0.1 MySQL
  • Port du serveur: 3306
  • Nom d'utilisateur: root

Je reçois un message d'erreur lorsque j'essaie de me connecter: "Échec de la connexion à MySQL via 127.0.0.1:3306 via le tunnel SSH à l'adresse mysql.myhost.com avec l'utilisateur root"

"Impossible de se connecter au serveur MySQL sur '127.0.0.1' (10061)"

Autre test: j'ai configuré un tunnel SSH avec le port 3306 sous Putty et je peux me connecter correctement à l'aide de MySQL Workbench via ce tunnel, qui transmet les connexions de mon 3306 local au serveur distant, comme décrit ci-dessus. Mais je ne parviens pas à utiliser "TCP / IP sur SSH" dans Workbench.

Question secondaire: lorsque Workbench demande "Chemin d'accès au fichier de clé publique SSH", n'a-t-il pas vraiment besoin de mon fichier de clé privée?

Dizzley
la source
4
Bon chagrin bugs.mysql.com/bug.php?id=61368 indique qu'il est un fichier de clé privée nécessaire au format OpenSSH. Je me demandais à ce sujet mais n'étais pas sûr.
Dizzley

Réponses:

29

Je suis tombé sur cette question quand j'ai moi-même rencontré cette erreur. Je pouvais enfin comprendre la configuration.

  1. Je n'ai touché à rien dans /etc/mysql/my.cnf qui a déjà bind_address = 127.0.0.1. Donc, seul localhost peut se connecter.
  2. J'utilise le serveur OpenSSH. Donc, dans son fichier de configuration / etc / ssh / sshd_config, je suis passé de no à yes, le param responsable du transfert de TCP, donc AllowTcpForwarding oui .
  3. Enfin, les éléments suivants sont entrés dans MySQL WorkBench.

    • Nom d'hôte SSH: 192.168.0.8:22 (mon serveur SSH écoute le port 22)
    • Nom d'utilisateur SSH: sshuser
    • Fichier de clé SSH: * C: \ Utilisateurs \ windowsuser \ .ssh \ id_rsa * (doit être une clé privée, même si elle est publique)
    • Nom d'hôte MySQL: 127.0.0.1 (cela ne devrait pas être changé, car le serveur MySQL est lié par défaut à localhost uniquement, ce que je n'ai pas changé)
    • Port du serveur MySQL: 3306 (également par défaut)
    • Nom d'utilisateur: root

La seule chose qui vous reste à faire est de configurer correctement votre serveur SSH pour qu’il utilise des clés plutôt que des mots de passe. J'espère que cela aidera quelqu'un.

Œil
la source
Une chose que je devais faire côté serveur était de vérifier que la ligne / etc / ssh / sshd_config était conforme à cette ligne: AuthorizedKeysFile /home/root/.ssh/authorized_keyset que leske_ authorised_keys contenaient ma clé PUBLIC comme entrée.
RyanNerd
Veuillez préciser si l’étape 2 définit quel ensemble AllowTcpForwarding yesest appliqué au serveur distant, c’est-à-dire à l’hôte avec l’instance MySQL à laquelle nous essayons de nous connecter; ou la machine locale avec MySQL Workbench installé
Nam G VU
@NamGVU étape 2 s'applique au serveur distant sur lequel MySQL est installé. En particulier pour le serveur OpenSSH qui fournit un tunnelage à MySQL via SSH.
Eye
J'ai essayé mais je ne parviens toujours pas à créer un tunnel. MySQL Workbench me dit de lire plus de détails sur les erreurs dans le fichier journal. Pouvez-vous savoir où lire?
Nam G VU
1
Je l'ai eu aujourd'hui - besoin de redémarrer après avoir configuré l' AllowTcpForwardingentrée
Nam G VU
8

Je pense que l'approche TCP / IP sur SSH fonctionne en établissant une connexion SSH "normale" sous-jacente à la connexion MySQL (de la même manière que vous utiliseriez un tunnel -Lavec le client de ligne de commande OpenSSH).

Par conséquent, vous devez spécifier une connexion à un serveur SSH sur le serveur via lequel vous établissez le tunnel. Ici, vous semblez utiliser mysql.myhost.com:3306, ce qui impliquerait que vous utilisez ce serveur SSH (pas MySQL) sur le port 3306.

Il est possible de lier un serveur MySQL sur 127.0.0.1:3306 et un serveur SSH sur votre adresse IP externe pour mysql.myhost.comle port 3306, mais c'est très peu probable. Je suppose que votre serveur SSH est à l’écoute sur le port 22 (par défaut).

Vous devriez probablement utiliser mysql.myhost.com:22. (Vérifiez que vous pouvez vous y connecter via un client SSH normal tel que Putty.)

Bruno
la source
8

Vous devrez peut-être vérifier les utilisateurs dans la table mysql.user.

Exécutez cette requête:

SELECT user,host FROM mysql.user;

Vous devriez voir quelque chose comme ça:

mysql> SELECT user,host,password FROM mysql.user;
+------------------+-------------+-------------------------------------------+
| user             | host        | password                                  |
+------------------+-------------+-------------------------------------------+
| root             | localhost   | *7A670E02260CDEEFF062DD08F3A6F6DA079998CB |
| ping             | %           | *124E1DB56CC8D6E2FEE8315BB2544BF04B980DB6 |
| admin            | 10.67.135.% | 1a6858054a41fede                          |
| icorbin          | 10.67.135.% | 366ed93a7396650e                          |
+------------------+-------------+-------------------------------------------+
4 rows in set (0.00 sec)

S'il vous plaît noter que

  • root @ localhost peut uniquement se connecter à partir de localhost.
  • ping @ '%' peut se connecter via TCP / IP
  • [email protected].% pouvez vous connecter via TCP / IP à partir de ce netblock uniquement
  • [email protected].% pouvez vous connecter via TCP / IP à partir de ce netblock uniquement

Si vous souhaitez que root se connecte via TCP / IP, vous devez spécifier l'adresse IP ou netblock pour un utilisateur root.

Quelque chose comme ça:

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'whateverpassword';

ou si le mot de passe root est le même pour root @ localhost alors

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY PASSWORD '*7A670E02260CDEEFF062DD08F3A6F6DA079998CB ';

CAVEAT: root @ '%' n'est normalement pas recommandé. Essayez peut-être root@'10.% 'ou n’importe quel autre netblock pour root.

Essaie !!!

RolandoMySQLDBA
la source
3
Ne devrait pas ...@localhostfonctionner via le tunnel SSH, puisque pour le serveur MySQL, la connexion vient de la fin du tunnel?
Bruno
@Bruno: Un moyen sûr de savoir est de vous connecter avec succès, puis d'exécuter SELECT USER (), CURRENT_USER (); et voir ce qu'il produit. La fonction USER () fait écho à ce que vous avez essayé d'authentifier, alors que CURRENT_USER () fait écho à ce que MySQL vous permettait de vous authentifier. Si CURRENT_USER () renvoie root @ localhost, la réponse à votre question est oui.
RolandoMySQLDBA
3

Vous utilisez peut-être une ancienne version de MySQL Workbench et devez effectuer une mise à jour. Il s'agit d'un bogue dans la version 6.0.8, qui est actuellement la version dans les référentiels Ubuntu. La mise à jour vers la version 6.3.6 a corrigé cela pour moi.

Téléchargements ici: http://dev.mysql.com/downloads/workbench/#downloads

Gleasonator
la source
2

Mon problème était dû au fait que j'essayais d'utiliser une ed25519clé SSH. J'ai remarqué cette erreur sur le serveur SSH dans auth.log:

sshd[25251]: Connection closed by 192.168.x.x [preauth]

Une fois que je suis passé à l’utilisation d’une clé RSA, tout a fonctionné comme prévu.

jbiz
la source
1

Vous essayez de vous connecter au serveur via ssh mais en utilisant le port mysql. Le port que vous voulez est celui que votre serveur ssh écoute, généralement 22, puis localhost et 3306 pour le nom d’hôte et le port mysql.

Justin Buser
la source
1

J'ai rencontré le même problème. J'ai vérifié et essayé de définir AllowTcpForwarding sur Oui, mais il manquait dans mon sshd_config, donc aucune aide. assurez-vous que le nom d'hôte ssh n'est PAS identique au nom d'hôte mysql (utilisez localhost).

Dans Workbench, choisissez + pour ajouter une nouvelle connexion et définissez les éléments suivants:

  • méthode de connexion: TCP / IP standard sur SSH
  • Nom d'hôte SSH: 192.168.0.50:22 (placez l'adresse IP et le port du serveur SSH distant (facultatif))
  • Nom d'utilisateur SSH: sshuser
  • Vous pouvez définir un mot de passe ou ajouter à l'invite
  • Nom d'hôte MYSQL: localhost ou 127.0.0.1
  • Port du serveur MYSQL: 3306
  • Vous pouvez définir un mot de passe ou ajouter à l'invite

Tester la connexion. Il devrait être réussi, puis cliquez sur OK.Viola!

Reegan Ochora
la source
1

Parfois, les clés créées par PuTTY ne fonctionnent pas. Utilisez ssh-keygen sur le système Linux pour créer une paire de clés. Copiez le contenu du nouvel id_rsa dans un fichier texte sous Windows. Assurez-vous d’ajouter le contenu de id_rsa.pub à allowed_keys sur la machine Linux. Toutes les autres valeurs par défaut dans Workbench sont correctes, notamment 127.0.0.1 pour le nom d’hôte MySQL. Bien entendu, il doit s'agir d'un protocole TCP / IP standard sur SSH.

mcmacerson
la source
1

J'ai eu la même erreur. Le problème est "un peu" le délai d'attente. J'ai lancé même la valeur jusqu'à 120 secondes qui n'a pas aidé.

Dans mon cas, je pourrais le résoudre en faisant un nslookup myserver.com et en utilisant l'adresse IP à la place du nom d'hôte. Mon hypothèse est un problème en essayant de se connecter d'IPv4 à IPv6.

Markus Zeller
la source
0

Je viens d'avoir ce même problème sur une machine Ubuntu qui se connecte à un serveur exécutant MySQL version 5.5.29 et MySQL Workbench 5.2.40. Le serveur SSH nécessite l'utilisation d'une clé ssh.

Je ne pouvais pas me connecter au serveur MySQL en utilisant l'utilisateur root, mais je devais créer un utilisateur non root distinct à utiliser pour la connexion. Après cela, j'ai pu me connecter très bien.

J'espère que cela t'aides.

Kyle Coots
la source
0

OK, je sais que c’est une vieille question, mais j’ai tiré mes cheveux dessus pendant des heures. J'ai vérifié tout ce qui avait été mentionné par Bruno et Eye et tout semblait bien aller. Ensuite, j'ai réalisé que c'était vraiment une affaire de clé privée / publique. J'ai donc lancé Pageant et ajouté ma clé privée, afin de créer une clé publique que MySQL Workbench pourrait lire et le tour est joué, connecté! (C’était en fait une sorte d’acclimatation lorsque MySQL Workbench a commencé à fonctionner, mais de manière heureuse.)

TLDR: Utilisez Pageant pour générer une clé publique à partir de votre clé privée.

Bonnie
la source
Les clés privées ne doivent jamais être utilisées comme clés publiques, c'est pourquoi elles sont privées.
James Anderson
@ JamesAnderson n'est-ce pas là le problème ? Le texte demande du privé, il devrait se lire public ... au moins selon le lien du bogue. Ou pas?
Thufir
-1

Seulement ce que j'ai trouvé ... souvent, je crée des utilisateurs sur un serveur SSH sans shell (tel que / sbin / nologin) pour les empêcher de pouvoir se connecter à un serveur et de créer des fichiers, etc. ... (pour les systèmes de production le fais sur des pare-feu).

Dans un environnement Linux normal, vous pouvez toujours transférer les ports suivants:

ssh -Nf -L 3306:%mysql_ip%:%mysql_port% %ssh_host%

et ensuite vous y connecter depuis le poste de travail local en tant que:

mysql -h localhost:3306 -u %mysql_user% -p

Mais workbench donne une erreur disant qu’il ne peut pas se connecter à MySQL ... Si vous voulez changer le shell pour que cet utilisateur puisse, disons, / bin / bash, tout fonctionnera correctement par la suite.

Aucune idée pourquoi Workbench exige un shell local sur le serveur SSH distant.

utilisateur251897
la source
-1

Créez simplement une nouvelle clé RSA au format correct pour mysql workbench.

Par exemple:

ssh-keygen -t rsa -b 4096 -C "[email protected]"
sera sera
la source