web-dev-qa-db-fra.com

Connexion MySQL sur tunnel SSH - comment spécifier un autre serveur MySQL?

J'ai environ 50 bases de données toutes configurées sous différents noms d'hôte, avec l'exigence que je me connecte à elles via un tunnel SSH.

Par exemple:

  • Hôte SSH à ssh.example.com

  • Hôte MySQL à mysql1.example.com

J'ai réussi à créer le tunnel en utilisant autossh (serveur Web exécutant Debian), mais je n'arrive pas à comprendre comment me connecter à un nom d'hôte MySQL spécifique "au-delà" du tunnel SSH.

Taper lsof -i -n | egrep '\<ssh\>' confirme que le tunnel fonctionne (envoie le port 3307 au port 3306 de ssh.example.com)

Alors quand j'essaie mysql -h 127.0.0.1 -P 3307 J'obtiens Connexion refusée. Pas trop bizarre car ce n'est pas un serveur MySQL.

Ma question à vous les gars:

Comment spécifier le mysql1.example.com Hôte APRÈS avoir créé le tunnel SSH? J'ai essayé de chercher partout mais je n'arrive pas à le comprendre.

49
Mad Marvin

Résolu! La chose était de se connecter au bon serveur lors de la création du tunnel lui-même - aurait dû voir celui-ci arriver.

ssh -f [email protected] -L 3307:mysql1.example.com:3306 -N

Ensuite mysql -h 127.0.0.1 -P 3307 a fonctionné comme prévu. :)

101
Mad Marvin

J'ai un blog sympa sur la façon de se connecter à MySQL en utilisant le tunnel SSH. C'est très bien expliqué ici .

La commande pour se connecter au tunnel SSH:

ssh -L [listening port]:[REMOTE_MYSQL_Host]:[REMOTE_MYSQL_PORT] [SSH_USER]@[SSH_Host]

La commande pour se connecter à MySQL:

localhost:[listening port]
15
sandra kevin

Lorsque vous ne disposez pas d'un accès direct à mysql-server, tu utilises jump-server.

Depuis votre machine, vous vous connectez (ssh) à jump-server et à partir de là, vous vous connectez à votre mysql-server.

Cela peut être évité en utilisant ssh- tunneling.

Supposons que votre

       jump server is `jump-ip`
       mysql server is `mysql-ip`
       your machine is `machine-ip`

Ouvrez simplement le client ssh (PuTTY sous Windows ou terminal sous Linux/iOS).

Type:

    ssh -L [local-port]:[mysql-ip]:[mysql-port] [jump-server-user]@[jump-ip]

Après cela, vous pouvez utiliser vos localhost et local-port pour accéder directement à mysql-server sur la machine distante.

Par exemple. Votre URL Jdbc pour accéder à la base de données mysql, dans ce cas, sera

jdbc:mysql://localhost:[local-port]/[database-name]
7
ketankk

J'ai créé un tunnel vers la base de données en utilisant cette commande

ssh  -L 10000:localhost:3306  user@<ip addess to connect DB> -N -f

-L est le port hôte local, il est défini par l'utilisateur, vous pouvez fournir n'importe quel numéro de port

entre 0 et 65535. 0 à 1023 sont réservés.

si vous utilisez l'authentification par clé sur le serveur, vous devez

mentionner la clé comme ça.

ssh -i <path of the private key>  -L 10000:localhost:3306  user@<ip addess to connect DB> -N -f
3
Javeed Shakeel