Tentativo di utilizzare MySQL Workbench con TCP / IP su SSH - impossibile connettersi


41

Non riesco a collegarmi utilizzando la connessione TCP / IP su SSH in MySQL Workbench da un PC. Cosa sta succedendo?

Ho creato un database MySQL 5.1 su un server Ubuntu mysql.myhost.com . Posso accedervi localmente. MySQL Workbench (PC) offre la possibilità di stabilire una connessione via TCP tramite ssh. Funziona sulla porta 3306 sul server remoto dove la riga di comando mysql funziona correttamente.

Ho usato i seguenti dettagli della sessione:

  • Metodo di connessione: TCP / IP su SSH.
  • Nome host SSH: mysql.myhost.com : 3306
  • Nome utente SSH: il mio login linux
  • File di chiave pubblica SSH: il mio file di chiave pubblica locale
  • Nome host MySQL: 127.0.0.1 MySQL
  • Porta del server: 3306
  • Nome utente: root

Ricevo un messaggio di errore quando provo a connettermi: "Impossibile connettermi a MySQL a 127.0.0.1:3306 attraverso il tunnel SSH su mysql.myhost.com con l'utente root"

"Impossibile connettersi al server MySQL su '127.0.0.1' (10061)"

Come altro test: ho impostato un tunnel SSH con la porta 3306 usando Putty e posso collegarmi OK usando MySQL Workbench attraverso quel tunnel che inoltra le connessioni al mio 3306 locale al server remoto come descritto sopra. Ma non riesco a far funzionare "TCP / IP over SSH" in Workbench.

Domanda secondaria: quando Workbench chiede "Percorso del file della chiave pubblica SSH" non ha davvero bisogno del mio file della chiave privata?


4
Buon dolore bugs.mysql.com/bug.php?id=61368 mostra che È un file chiave PRIVATO necessario in formato OpenSSH. Mi chiedevo a questo proposito ma non ero sicuro.
Dizzley,

Risposte:


29

Mi sono imbattuto in questa domanda quando io stesso avevo riscontrato questo errore. Finalmente sono riuscito a capire la configurazione.

  1. Non ho toccato nulla in /etc/mysql/my.cnf che ha già bind_address = 127.0.0.1. Quindi solo localhost può connettersi.
  2. Uso il server OpenSSH. Quindi nel suo file di configurazione / etc / ssh / sshd_config ho cambiato da no a yes il parametro responsabile dell'inoltro TCP, quindi AllowTcpForwarding yes .
  3. Finalmente ho inserito quanto segue in MySQL WorkBench.

    • Nome host SSH: 192.168.0.8:22 (il mio server SSH è in ascolto sulla porta 22)
    • Nome utente SSH: sshuser
    • File chiave SSH: * C: \ Users \ windowsuser \ .ssh \ id_rsa * (dovrebbe essere una chiave privata, anche se è pubblica)
    • Nome host MySQL: 127.0.0.1 (questo non dovrebbe essere cambiato, dal momento che il server MySQL per impostazione predefinita è associato solo a localhost che non ho modificato)
    • Porta del server MySQL: 3306 (anche predefinita)
    • Nome utente: root

L'unica cosa rimasta per te è configurare correttamente il tuo server SSH affinché funzioni con le chiavi piuttosto che con le password. Spero che questo possa aiutare qualcuno.


Una cosa che dovevo fare sul lato server era assicurarmi che il file / etc / ssh / sshd_config fosse questa riga: AuthorizedKeysFile /home/root/.ssh/authorized_keyse che le chiavi autorizzate avevano la mia chiave PUBLIC come voce.
RyanNerd il

Si prega di chiarire se il passaggio 2 quale set AllowTcpForwarding yesè applicato al server remoto, ovvero all'host con istanza MySQL a cui stiamo tentando di connettersi; o il computer locale con MySQL Workbench installato
Nam G VU

Il passaggio 2 di @NamGVU si applica al server remoto su cui è installato MySQL. In particolare al server OpenSSH che fornisce tunneling a MySQL tramite SSH.
Occhio

Ho provato ma non riesco ancora a tunnel. MySQL Workbench mi dice di leggere ulteriori dettagli sull'errore nel file di registro. Sai dove leggere?
Nam G VU,

1
Ho funzionato oggi - ho bisogno di un riavvio dopo aver configurato la AllowTcpForwardingvoce
Nam G VU

8

Penso che l'approccio TCP / IP su SSH funzioni stabilendo una "normale" connessione SSH alla base della connessione MySQL (nello stesso modo in cui si farebbe tunnel usando -Lil client da riga di comando OpenSSH).

Pertanto, è necessario specificare una connessione a un server SSH sul server tramite il quale si sta stabilendo il tunnel. Qui, sembra mysql.myhost.com:3306che tu stia utilizzando , il che implicherebbe che stai eseguendo questo server SSH (non MySQL) sulla porta 3306.

È possibile associare un server MySQL su 127.0.0.1:3306 e un server SSH sul tuo indirizzo IP esterno per mysql.myhost.comsulla porta 3306, ma è molto improbabile. Suppongo che il tuo server SSH sia in ascolto sulla porta 22 (impostazione predefinita).

Probabilmente dovresti usare mysql.myhost.com:22. (Verifica di poterti connettere ad esso tramite un normale client SSH come Putty.)


8

Potrebbe essere necessario controllare gli utenti nella tabella mysql.user.

Esegui questa query:

SELECT user,host FROM mysql.user;

Dovresti vedere qualcosa del genere:

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)

Si prega di notare che

  • root @ localhost può accedere solo da localhost.
  • ping @ '%' può accedere tramite TCP / IP
  • admin@10.67.135.% può accedere tramite TCP / IP solo da quel netblock
  • icorbin@10.67.135.% può accedere tramite TCP / IP solo da quel netblock

Se si desidera che root si connetta tramite TCP / IP, è necessario specificare l'indirizzo IP o netblock per un utente root.

Qualcosa come questo:

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

o se la password di root è la stessa per root @ localhost allora

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

CAVEAT: root @ '%' non è normalmente raccomandato. Forse prova root@'10.% 'o qualsiasi altro netblock per root.

Provaci !!!


3
Non dovrebbe ...@localhostfunzionare tramite il tunnel SSH, dal momento che per quanto riguarda il server MySQL, la connessione viene dalla fine del tunnel?
Bruno,

@Bruno: un modo sicuro per sapere è connettersi con successo ed eseguire SELECT USER (), CURRENT_USER (); e vedi cosa produce. La funzione USER () fa eco a ciò che hai tentato di autenticare, mentre CURRENT_USER () fa eco a ciò che MySQL ti ha permesso di autenticare. Se CURRENT_USER () fa eco a root @ localhost, la risposta alla tua domanda è sì.
RolandoMySQLDBA,

3

È possibile che tu stia utilizzando una versione precedente di MySQL Workbench e debba essere aggiornato. Questo è un bug nella versione 6.0.8, che è attualmente la versione nei repository Ubuntu. L'aggiornamento alla versione 6.3.6 ha risolto questo problema per me.

Scarica qui: http://dev.mysql.com/downloads/workbench/#downloads



2

Il mio problema era dovuto al fatto che stavo cercando di usare una ed25519chiave SSH. Ho notato questo errore sul server SSH in auth.log:

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

Una volta passato a utilizzare una chiave RSA, tutto ha funzionato come previsto.


1

Stai provando a connetterti al server tramite ssh ma usando la porta mysql. La porta che desideri è quella su cui il tuo server SSH è in ascolto, in genere 22, quindi localhost e 3306 per nome host e porta mysql.


1

Ho affrontato lo stesso problema. Ho controllato e provato a impostare AllowTcpForwarding Sì ma mancava nel mio sshd_config, quindi nessun aiuto. assicurati che il nome host ssh NON sia lo stesso con il nome host mysql (usa localhost).

In workbench, scegli + per aggiungere una nuova connessione e impostare quanto segue:

  • metodo di connessione: TCP / IP standard su SSH
  • Nome host SSH: 192.168.0.50:22 (inserire l'IP e la porta del server SSH remoto (opzionale))
  • Nome utente SSH: sshuser
  • È possibile impostare la password o aggiungere al prompt
  • Nome host MYSQL: localhost o 127.0.0.1
  • Porta del server MYSQL: 3306
  • È possibile impostare la password o aggiungere al prompt

Test di connessione. Dovrebbe avere successo, quindi premi OK.Viola!


1

A volte le chiavi create da PuTTY non funzionano. Usa ssh-keygen sulla scatola di Linux per creare una coppia di chiavi. Copia il contenuto del nuovo id_rsa in un file di testo su Windows. Assicurati di aggiungere il contenuto di id_rsa.pub a authorized_keys sulla scatola di Linux. Tutte le altre impostazioni predefinite in Workbench vanno bene, incluso 127.0.0.1 per MySQL Hostname. Ovviamente deve essere TCP / IP standard su SSH.


1

Ho trovato lo stesso errore. Il problema è "in qualche modo" il timeout. Ho alzato anche il valore fino a 120 secondi, il che non mi ha aiutato.

Nel mio caso ho potuto risolverlo facendo un myserver.com nslookup e usando l'indirizzo IP invece del nome host. La mia ipotesi è un problema nel tentativo di connettersi da IPv4 a IPv6.


0

Ho appena avuto lo stesso problema sulla macchina Ubuntu che si collega a un server che esegue MySQL versione 5.5.29 e MySQL Workbench 5.2.40. Il server SSH richiede l'uso di un tasto ssh.

Non sono stato in grado di connettermi al server MySQL utilizzando l'utente root, invece ho dovuto creare un utente non root separato da utilizzare per l'accesso. Dopo ciò sono stato in grado di connettermi bene.

Spero che sia di aiuto.


0

OK, so che questa è una vecchia domanda, ma mi sono strappato i capelli per ore. Ho controllato tutto quanto menzionato da Bruno e Eye e sembrava tutto a posto. Poi ho capito che era davvero una cosa chiave pubblica / privata. Così ho acceso Pageant e ho aggiunto la mia chiave privata, in modo da creare una chiave pubblica che MySQL Workbench potesse leggere e voilà, connessa! (In realtà è stato un po 'anticlimatico quando MySQL Workbench ha effettivamente iniziato a funzionare, ma in modo felice.)

TLDR: utilizzare Pageant per generare una chiave pubblica dalla chiave privata.


Le chiavi private non dovrebbero mai essere usate come chiavi pubbliche, ecco perché sono private.
James Anderson,

@JamesAnderson non è questo il problema ? Il testo richiede privato, dovrebbe essere pubblico ... almeno in base al link bug. O no?
Giovedì

-1

Solo quello che ho trovato ... spesso sto creando utenti sul server SSH senza shell (come / sbin / nologin) per impedire loro di essere in grado di accedere a un server e creare file ed ecc ... (per i sistemi di produzione lo stai facendo sui firewall).

Successivamente, in un normale ambiente Linux, è ancora possibile inoltrare le porte, ad esempio:

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

e successivamente connettersi ad esso dalla workstation locale come:

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

Ma workbench dà un errore che non può connettersi a MySQL ... Se cambierai la shell per quell'utente, diciamo, / bin / bash - tutto funziona bene dopo.

Non ho idea del motivo per cui Workbench richiede una shell locale sul server SSH remoto.


-1

Basta creare una nuova chiave RSA con il formato corretto per mysql workbench.

Per esempio:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.