Durante meses, me he conectado a la instancia de MySQL que se ejecuta en nuestro servidor de prueba local a través de un túnel SSH sin ningún problema. Sin embargo, de repente, sin cambios en los que pueda pensar, el servidor ha comenzado a rechazar el intento de inicio de sesión de Sequel Pro con el error:
No se puede conectar al host 127.0.0.1 porque se denegó el acceso.
Vuelva a verificar su nombre de usuario y contraseña y asegúrese de permitir el acceso desde su ubicación actual.
MySQL dijo: Acceso denegado para el usuario 'root' @ 'localhost' (usando la contraseña: YES)
Puedo iniciar sesión desde la terminal cuando estoy conectado directamente al servidor a través de SSH, pero no a través de un túnel SSH. El problema no es específico para Sequel Pro o solo para mí, obtengo el mismo error al conectarme a través de MySQL Workbench que otros en la oficina. He restablecido la contraseña mysqladmin
solo por el bien de la cordura, definitivamente ese no es el problema.
Cuando comencé a buscarlo más, noté que el error informaba que el servidor era "localhost", en lugar de "127.0.0.1", que ingresé en Sequel Pro. Un amigo sugirió que probablemente solo sea un mal manejo de errores, pero parece extraño dada la diferencia significativa entre localhost y 127.0.0.1 en MySQL.
En un intento por solucionar el problema de la tunelización, concedí acceso a root @%, para poder conectarme directamente. Esto funciona en su mayor parte, puedo ver los datos de la tabla, crear nuevas bases de datos, etc. El único problema es cuando vengo a crear usuarios y aparece el error:
Acceso denegado para el usuario 'root' @ '%' (utilizando contraseña: SÍ)
Curiosamente, el usuario está realmente creado, creo que es solo un problema con la concesión. Sin embargo, de nuevo desde el terminal puedo hacer cualquier cosa cuando inicie sesión como root.
¿Alguien puede ayudar a arrojar algo de luz sobre por qué las conexiones de túnel y (probablemente) los comandos de concesión reciben el error de acceso denegado?
Como referencia, MySQ es la versión 5.6.16 con la mayoría de las configuraciones predeterminadas, instaladas a través de Homebrew en un equipo con MAC OS X Server.
Actualizar
Aquí está la lista de hosts a los que actualmente se le otorga acceso a root:
mysql> select host,user from mysql.user where user='root';
+----------------+------+
| host | user |
+----------------+------+
| % | root |
| 127.0.0.1 | root |
| ::1 | root |
| localhost | root |
+----------------+------+
4 rows in set (0.00 sec)
Según tengo entendido, ¿la primera fila ("%") realmente debería hacer que las otras sean redundantes?
Actualización 2
Se corrigió el problema de la subvención; Al usuario root @% no se le han otorgado todos los privilegios con el extra with grant option
al final, por lo que podría hacer todo menos otorgar. Sin embargo, aún me encantaría saber por qué se niegan los túneles SSH.
fuente
Respuestas:
En MySQL, la
localhost
palabra clave está reservada para la conexión mediante el socket MySQL y debe utilizar la dirección IP127.0.0.1
para las conexiones TCP al puerto de red MySQL en 127.0.0.1. Esto significa que tanto el servidor debe otorgar privilegios a los usuarios específicamente127.0.0.1
, como el cliente debe utilizarlo-h 127.0.0.1
para atravesar el túnel en lugar de conectarse a un socket local.Para permitirle el acceso mediante el reenvío de puertos SSH, necesita algo como:
y luego correr
y posiblemente
Si aún no funciona, reinicie el proceso del servidor.
En los mensajes de error 127.0.0.1 después de una búsqueda inversa de DNS se traduce para
localhost
dificultar la depuración.Como el describe manual :
fuente
grant all on *.* to 'root'@'127.0.0.1' with grant option;
ssh -h 127.0.0.1 -u root -p
escribo de forma remota en el servidor, la conexión también se rechaza.-h 127.0.0.1
conexiones que fallaban en el servidor reiniciando mysql, pero el zócalo ssh aún no funcionaHe visto en el pasado con ssh tunels, que hay una diferencia entre Otorgar todo a "localhost" y otorgar todo a "127.0.0.1", así que intente otorgar a "127.0.0.1 en su lugar o además de su concesión" localhost ".
fuente
grant
declaraciones conidentified by ..
para asegurarse de que todas las contraseñas raíz sean iguales, pero no es un placer.En lugar de usar la Sequel para crear el túnel, ¿qué es lo que creas tú mismo?
ssh -Cc blowfish -Nf -vv -L3306: localhost: 3306 sshuser @ dominio
Luego conéctate con Sequel a 127.0.0.1:3306 ¿Puedes conectarte? ¿Aparece algo en su terminal (o en los registros del cliente ssh)?
fuente