No se puede conectar a la base de datos MySQL a través de SSH con Workbench


10

Estoy tratando de conectarme a mi base de datos a través de un túnel SSH desde uno de nuestros servidores de aplicaciones web con MySQL Workbench. Aquí está la configuración básica; Tenga en cuenta que cambié algunos valores en la captura de pantalla por razones de seguridad.

Captura de pantalla de Workbench

El problema es que cada vez que intento conectarme a través de un túnel SSH desde uno de nuestros servidores de aplicaciones, aparece el siguiente error:

No se pudo conectar con us-east-1.amazonaws.com a través del túnel SSH en computer.amazonaws.com con el usuario social_shop_prod. No se puede conectar al servidor MySQL en 127.0.0.1.

Sin embargo, si uso las mismas credenciales sobre SSH a través de la siguiente línea de comando:

mysql -u social_shop_prod -h us-east-1.amazonaws.com -p

Puedo conectarme con éxito y obtener el símbolo del sistema interactivo de MySQL.

He estado hablando con el resto de mi equipo de desarrollo aquí y ninguno de nosotros puede entender por qué no puedo hacer un túnel sobre SSH desde nuestros servidores de aplicaciones con Workbench; pero cuando hago SSH a uno de nuestros servidores de aplicaciones y me conecto a MySQL a través de la línea de comandos; Me puedo conectar con éxito.

¿Y por qué intenta conectarse a través de 127.0.0.1? No especifiqué eso en la configuración; ni mi archivo de hosts está redirigiendo los dominios que se muestran a continuación a esa IP.

Cualquier aportación constructiva es muy apreciada.

Respuestas:


5

Como se está conectando a través de un túnel SSH, esto significa que el puerto MySQL 3306 de us-east-1.amazonaws.com se está abriendo localmente en su computadora. La dirección IP de su computadora es 127.0.0.1 o localhost. Cuando se conecta al servidor mysql en us-east-1.amazonaws.com, en realidad está accediendo a él a través de 127.0.0.1, es decir, su computadora. Si tenía otro túnel abierto o MySQL ejecutándose localmente en su computadora, entonces puede ser que ese otro servidor MySQL esté rechazando sus intentos de autenticación

Hay algunas pruebas que puedes probar:

1. ¿En qué puertos está escuchando su computadora Windows?

Desde un símbolo del sistema: netstat -a (enumera todos los puertos que están abiertos)

En Linux sería: netstat -tlpn

2. Prueba de conectividad básica

Desde un símbolo del sistema de DOS o una consola de Linux: telnet 127.0.0.1 3306

Si tiene un tiempo de espera, o algún otro programa responde, entonces su túnel no está configurado correctamente.

3. Cambie el número de puerto que MySQL Workbench está abriendo localmente

Asumimos que MySQL Workbench está creando el túnel en su computadora. Si es así, en MySQL workbench, intente hacer un túnel a través de otro número de puerto como 9000.

Asegúrese de que 9000 no figuraba como un puerto abierto desde: netstat -a

Si tiene acceso ssh a us-east-1.amazonaws.com

4. Intente conectarse a MySQL desde us-east-1.amazonaws.com

mysql -u myuser -h 127.0.0.1 -p

Y como dijo Rolando, querrás verificar que te estás conectando con las credenciales correctas. Por ejemplo, si se está conectando como myuser@127.0.0.1 y tiene un usuario myuser sin un host, probablemente no podrá conectarse usando user@127.0.0.1.


2

La razón por la que se contacta 127.0.0.1 es porque el túnel conecta un puerto en su máquina local al host remoto. El mensaje parece sugerir que no se está haciendo una conexión SSH.

Pruebe esto desde la línea de comando:

ssh -L 33000:remotehost:3306 user@remotehost

Asegúrese de que SSH permita puertos reenviados; Si recibe un mensaje que indica que el reenvío no estaba permitido o fue rechazado, entonces es por eso.

Para solucionar esto, tendría que cambiar la configuración del servidor; agregue esta configuración al servidor SSH:

AllowTcpForwarding yes

No olvide reiniciar el servidor para activar esta configuración.


¿Puedes explicar ese comando un poco? estás vinculando la dirección? ¿Se puede combinar con comandos mysql?
Thufir

Con SSH aquí está configurando un túnel, nada más. Conecta un puerto remoto a un puerto local. Lo que debe hacer en este caso es vincular un puerto local al puerto remoto de MySQL.
Mei

1

Seguí lidiando con este problema durante casi 2 semanas, ahora he logrado configurarlo. Lo publicaré aquí para que más personas puedan probarlo.

Ok, estoy usando OpenSSH (Win10 nativo) y Workbench 8.

Paso a paso:
1. Agregue sus claves de host SSH al agente utilizando ssh-add.
2. Genere los pares de claves usando ssh-keygen. En mi caso, estos archivos van automáticamente Users/myUser/.sshsegún las configuraciones de instalación.
3. Agregue la clave pública al archivo Authorized_keys (que debe estar dentro de la ruta de instalación de su servidor, en mi caso Windows/System32/OpenSSH/.ssh) sin extensiones.
4. Agregue las claves generadas que acaba de crear al agente usando ssh-add.

Los pasos anteriores son más o menos la configuración de un servidor SSH de línea de comando, que creo que el OP ya hizo para que su conexión funcione a través del terminal. Para configurar MySQL Workbench 8, debe hacer exactamente lo mismo, excepto que debe convertir private_key.pem a un formato OpenSSH antes de moverlos Users/myUser/.sshyOpenSSH_instalation_path/.ssh

  1. Convierta private_key.pem al formato OpenSSH usando PUTTYgen.
  2. Copie la "Clave pública para pegar en el campo OpenSSH Authorized Keys" .
  3. Guarde la clave pública en las carpetas User/myUser/.sshyOpenSSH_instalation_path/.ssh
  4. Pegue la clave que copió de PUTTY en el archivo autorizado_claves en la OpenSSH_instalation_path/.sshcarpeta.
  5. Exporte la clave de formato OpenSSH a User/myUser/.ssh.
  6. Reinicie los servicios sshd y mysql
  7. Configure The Workbench para conectarse al servidor SSH utilizando la clave privada convertida.

ACTUALIZACIÓN: deberá configurar lo siguiente en su archivo sshd_config:

PermitRootLogin sin contraseña
PubkeyAuthentication sí
PasswordAuthentication no
PermitEmptyPasswords no
AllowTcpForwarding sí

POR FAVOR LEE:

Soy un analista inexperto, así que si un usuario más avanzado sabe cuál de las dos carpetas .ssh es la correcta, díganos. Encuentro que OpenSSH es un poco ambiguo sobre esto.
Esto funcionó para mí mientras configuraba un entorno de desarrollo local utilizando localhost únicamente. Solo con fines de aprendizaje.
Es posible que desee agregar myUser @ localhost a los usuarios de MySQL Workbench antes de probar la conexión.
Si realmente es necesario, puedo agregar imágenes.


0

En mi caso, el problema que tuve que cambiar a un nombre de dominio válido o IP en lugar de un host personalizado localmente resuelto.

La resolución de host personalizada falla ( /etc/hosts)

Trabajo con un mecanismo de resolución de hosts locales que definió:

#.#.#.#    my-vm

Por alguna razón, con MySQL 5.2.47el Linux Mint 14 (Nadia)cual es similar al Ubuntu 12.10 (Quantal)del mecanismo de solución no funciona .

Solución

Simplemente cambie a un nombre de dominio público , como my-website.comresolver el problema.


@Mat arreglado, thanj = ks
Édouard Lopez el


0

Tuve un problema similar, y esto puede ser obvio, pero revise las reglas de firewall en AWS. Tengo un rango de IP configurado, para restringir las conexiones del mundo exterior. Y la IP en mi oficina cambió, por lo que salió del rango de IP. Mi colega en otra oficina aún podía conectarse, así que pensé que el problema estaba en mi PC, pero el problema estaba en las reglas del firewall en AWS. Espero que ayude a alguien :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.