Intentando usar MySQL Workbench con TCP / IP sobre SSH - no se pudo conectar

41

No puedo conectarme usando una conexión TCP / IP a través de SSH en MySQL Workbench desde una PC. ¿Que esta pasando?

Creé una base de datos MySQL 5.1 en un servidor Ubuntu mysql.myhost.com . Puedo acceder a él localmente. MySQL Workbench (PC) ofrece hacer una conexión a través de TCP a través de ssh. Se ejecuta en el puerto 3306 en el servidor remoto donde la línea de comandos mysql funciona bien.

Usé los siguientes detalles de la sesión:

  • Método de conexión: TCP / IP sobre SSH.
  • Nombre de host SSH: mysql.myhost.com : 3306
  • Nombre de usuario SSH: mi inicio de sesión de Linux
  • Archivo de clave pública SSH: mi archivo de clave pública local
  • Nombre de host de MySQL: 127.0.0.1 MySQL
  • Puerto del servidor: 3306
  • Nombre de usuario: root

Recibo un mensaje de error cuando intento conectarme: "Error al conectarme a MySQL en 127.0.0.1:3306 a través del túnel SSH en mysql.myhost.com con usuario root"

"No se puede conectar al servidor MySQL en '127.0.0.1' (10061)"

Como otra prueba, configuré un túnel SSH con el puerto 3306 usando Putty y puedo conectarme bien usando MySQL Workbench a través de ese túnel que reenvía las conexiones a mi 3306 local al servidor remoto como se describió anteriormente. Pero no puedo hacer que "TCP / IP sobre SSH" funcione en Workbench.

Pregunta secundaria: cuando Workbench pregunta "Ruta al archivo de clave pública SSH", ¿realmente no necesita mi archivo de clave privada?

Dizzley
fuente
44
Buena pena bugs.mysql.com/bug.php?id=61368 muestra que ES un archivo de clave PRIVADA que se necesita en formato OpenSSH. Me preguntaba sobre eso pero no estaba seguro.
Dizzley

Respuestas:

29

Me topé con esta pregunta cuando me encontré con este error. Finalmente pude averiguar la configuración.

  1. No toqué nada en /etc/mysql/my.cnf que ya tiene bind_address = 127.0.0.1. Entonces solo localhost puede conectarse.
  2. Yo uso el servidor OpenSSH. Entonces, en su archivo de configuración / etc / ssh / sshd_config, cambié de no a el parámetro responsable del reenvío de TCP, por lo tanto, AllowTcpForwarding sí .
  3. Finalmente tengo lo siguiente ingresado en MySQL WorkBench.

    • Nombre de host SSH: 192.168.0.8:22 (mi servidor SSH escucha el puerto 22)
    • Nombre de usuario SSH: sshuser
    • Archivo de clave SSH: * C: \ Users \ windowsuser \ .ssh \ id_rsa * (debe ser una clave privada, aunque diga pública)
    • Nombre de host de MySQL: 127.0.0.1 (esto no se debe cambiar, ya que el servidor MySQL está vinculado de forma predeterminada solo a localhost que no cambié)
    • Puerto del servidor MySQL: 3306 (también predeterminado)
    • Nombre de usuario: root

Lo único que le queda es configurar correctamente su servidor SSH para que funcione con claves en lugar de contraseñas. Espero que esto ayude a alguien.

Ojo
fuente
Una cosa que tenía que hacer en el lado del servidor era asegurarme de que / etc / ssh / sshd_config tenía esta línea: AuthorizedKeysFile /home/root/.ssh/authorized_keysy que los claves_autorizadas tenían mi clave PUBLIC como entrada.
RyanNerd
Aclare si en el paso 2, qué conjunto AllowTcpForwarding yesse aplica al servidor remoto, es decir, el host que tiene la instancia de MySQL a la que intentamos conectarnos; o la máquina local con MySQL Workbench instalado
Nam G VU
@NamGVU, el paso 2 se aplica al servidor remoto donde está instalado MySQL. Particularmente al servidor OpenSSH que proporciona túneles a MySQL a través de SSH.
Ojo
Lo intenté pero aún no logro hacer un túnel. MySQL Workbench me dice que lea más detalles del error en el archivo de registro. ¿Sabes dónde leer?
Nam G VU
1
Lo hice funcionar hoy - necesito reiniciar después de configurar la AllowTcpForwardingentrada
Nam G VU
8

Creo que el enfoque TCP / IP sobre SSH funciona mediante el establecimiento de una conexión SSH "normal" subyacente a la conexión MySQL (de la misma manera que lo haría -Lcon el cliente de línea de comandos OpenSSH).

Por lo tanto, deberá especificar una conexión a un servidor SSH en el servidor a través del cual está estableciendo el túnel. Aquí, parece estar usando mysql.myhost.com:3306, lo que implicaría que está ejecutando este servidor SSH (no MySQL) en el puerto 3306.

Es posible vincular un servidor MySQL en 127.0.0.1:3306 y un servidor SSH en su dirección IP externa para mysql.myhost.comel puerto 3306, pero eso es muy poco probable. Supongo que su servidor SSH está escuchando en el puerto 22 (el predeterminado).

Probablemente deberías usar mysql.myhost.com:22. (Compruebe que también puede conectarse a través de un cliente SSH normal como Putty).

Bruno
fuente
8

Es posible que deba verificar los usuarios en la tabla mysql.user.

Ejecute esta consulta:

SELECT user,host FROM mysql.user;

Debería ver algo como esto:

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)

Por favor informa eso

  • root @ localhost solo puede iniciar sesión desde localhost.
  • ping @ '%' puede iniciar sesión a través de TCP / IP
  • [email protected].% puede iniciar sesión a través de TCP / IP solo desde ese bloque de red
  • [email protected].% puede iniciar sesión a través de TCP / IP solo desde ese bloque de red

Si desea que la raíz se conecte a través de TCP / IP, debe especificar la dirección IP o el bloqueo de red para un usuario raíz.

Algo como esto:

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

o si la contraseña de root es la misma para root @ localhost entonces

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

PRUEBA: root @ '%' normalmente no se recomienda. Tal vez intente root@'10.% 'o cualquier otro netblock para root.

Darle una oportunidad !!!

RolandoMySQLDBA
fuente
3
¿No debería ...@localhostfuncionar a través del túnel SSH, ya que en lo que respecta al servidor MySQL, la conexión proviene del final del túnel?
Bruno
@Bruno: Una forma segura de saber es conectarse con éxito y luego ejecutar SELECT USER (), CURRENT_USER (); y mira lo que sale. La función USER () hace eco de lo que intentó autenticar como, mientras que CURRENT_USER () hace eco de lo que MySQL le permitió autenticar como. Si CURRENT_USER () hace eco de root @ localhost, entonces la respuesta a su pregunta es sí.
RolandoMySQLDBA
3

Es posible que esté utilizando una versión anterior de MySQL Workbench y necesite actualizar. Este es un error en la versión 6.0.8, que actualmente es la versión en los repositorios de Ubuntu. La actualización a la versión 6.3.6 me arregló esto.

Descargas aquí: http://dev.mysql.com/downloads/workbench/#downloads

Gleasonator
fuente
2

Mi problema se debió al hecho de que estaba tratando de usar un ed25519 clave SSH. Noté este error en el servidor SSH en auth.log:

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

Una vez que cambié a usar una clave RSA, todo funcionó como se esperaba.

jbiz
fuente
1

Estás intentando conectarte al servidor a través de ssh pero estás usando el puerto mysql. El puerto que desea es el que esté escuchando su servidor ssh, generalmente 22, luego localhost y 3306 para mysql hostname y puerto.

Justin Buser
fuente
1

Me enfrenté al mismo problema. Verifiqué e intenté configurar AllowTcpForwarding Sí, pero faltaba en mi sshd_config, así que no hay ayuda. asegúrese de que el nombre de host ssh NO sea el mismo que el nombre de host mysql (use localhost).

En workbench, elija + para agregar una nueva conexión y configure lo siguiente:

  • Método de conexión: TCP / IP estándar sobre SSH
  • Nombre de host SSH: 192.168.0.50:22 (coloque el IP y el puerto del servidor SSH remoto (opcional))
  • Nombre de usuario SSH: sshuser
  • Puede establecer una contraseña o agregar en el indicador
  • Nombre de host MYSQL: localhost o 127.0.0.1
  • Puerto del servidor MYSQL: 3306
  • Puede establecer una contraseña o agregar en el indicador

Conexión de prueba. Debería tener éxito y luego presionar OK.Viola!

Reegan Ochora
fuente
1

A veces las claves creadas por PuTTY no funcionan. Use ssh-keygen en el cuadro de Linux para crear un par de claves. Copie el contenido de la nueva id_rsa a un archivo de texto en Windows. Asegúrese de agregar el contenido de id_rsa.pub a Authorizedkeys en el cuadro de Linux. Todos los demás valores predeterminados en Workbench están bien, incluido 127.0.0.1 para MySQL Hostname. Por supuesto, tiene que ser TCP / IP estándar sobre SSH.

mcmacerson
fuente
1

Se me ocurrió el mismo error. El problema es "algo" el tiempo de espera. Arranqué incluso el valor de hasta 120 segundos que no ayudó.

En mi caso, podría resolverlo haciendo un nslookup myserver.com y usando la dirección IP en lugar del nombre de host. Mi suposición es un problema al intentar conectarse de IPv4 a IPv6.

Markus Zeller
fuente
0

Acabo de tener este mismo problema en la máquina Ubuntu que se conecta a un servidor que ejecuta MySQL versión 5.5.29 y MySQL Workbench 5.2.40. El servidor SSH requiere el uso de una clave ssh.

No pude conectarme al servidor MySQL usando el usuario root, en su lugar tuve que crear un usuario no root separado para usar para el inicio de sesión. Después de eso pude conectarme bien.

Espero que esto ayude.

Kyle Coots
fuente
0

OK, sé que esta es una vieja pregunta, pero me saqué el pelo por horas. Revisé todo lo mencionado por Bruno y Eye y todo parecía estar bien. Entonces me di cuenta de que realmente era una clave privada / pública. ¡Así que encendí el concurso y agregué mi clave privada, para que creara una clave pública que MySQL Workbench pudiera leer y listo! (En realidad, fue un poco anticlimático cuando MySQL Workbench comenzó a funcionar, pero de una manera feliz).

TLDR: utilice el concurso para generar una clave pública a partir de su clave privada.

Bonnie
fuente
Las claves privadas nunca deben usarse como claves públicas, por eso son privadas.
James Anderson
@JamesAnderson, ¿de qué se trata el error ? El texto está pidiendo privado, debería leer público ... al menos según el enlace del error. ¿O no?
Thufir
-1

Solo lo que encontré ... a menudo estoy creando usuarios en el servidor SSH sin shell (como / sbin / nologin) para evitar que puedan iniciar sesión en un servidor y crear archivos y etc. allí ... (para sistemas de producción lo estás haciendo en cortafuegos).

En un entorno Linux normal después de eso, aún puede reenviar puertos después de eso, como:

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

y luego conéctese desde la estación de trabajo local como:

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

Pero el banco de trabajo da un error de que no se puede conectar a MySQL ... Si va a cambiar el shell para ese usuario, digamos, / bin / bash, todo funciona bien después de eso.

No tengo idea de por qué Workbench requiere un shell local en el servidor SSH remoto.

usuario251897
fuente
-1

Simplemente cree una nueva clave RSA con el formato correcto para mysql workbench.

Por ejemplo:

ssh-keygen -t rsa -b 4096 -C "[email protected]"
voluntad
fuente