Tentando usar o MySQL Workbench com TCP / IP sobre SSH - falha ao conectar


41

Não consigo conectar usando a conexão TCP / IP sobre SSH no MySQL Workbench a partir de um PC. O que está acontecendo?

Eu criei um banco de dados MySQL 5.1 em um servidor Ubuntu mysql.myhost.com . Eu posso acessá-lo localmente. O MySQL Workbench (PC) oferece uma conexão via TCP sobre ssh. Ele roda na porta 3306 no servidor remoto, onde o mysql da linha de comando funciona bem.

Usei os seguintes detalhes da sessão:

  • Método de conexão: TCP / IP sobre SSH.
  • Nome do host SSH: mysql.myhost.com : 3306
  • Nome de usuário SSH: meu login no linux
  • Arquivo de chave pública SSH: meu arquivo de chave pública local
  • Nome do host do MySQL: 127.0.0.1 MySQL
  • Porta do servidor: 3306
  • Nome de usuário: root

Recebo uma mensagem de erro ao tentar conectar: ​​"Falha ao conectar ao MySQL em 127.0.0.1:3306 através do túnel SSH em mysql.myhost.com com raiz do usuário"

"Não foi possível conectar ao servidor MySQL em '127.0.0.1' (10061)"

Como outro teste - eu configurei um túnel SSH com a porta 3306 usando Putty e posso conectar OK usando o MySQL Workbench através desse túnel que encaminha as conexões ao meu 3306 local para o servidor remoto, conforme descrito acima. Mas não consigo "TCP / IP sobre SSH" trabalhando no Workbench.

Pergunta secundária: quando o Workbench pede "Caminho para o arquivo de chave pública SSH", ele realmente não precisa do meu arquivo de chave privada?


4
Bom sofrimento. bugs.mysql.com/bug.php?id=61368 mostra que É um arquivo de chave PRIVATE necessário no formato OpenSSH. Eu me perguntava sobre isso, mas não tinha certeza.
Dizzley

Respostas:


29

Eu me deparei com essa pergunta quando eu mesmo havia encontrado esse erro. Finalmente pude descobrir a configuração.

  1. Não toquei em nada no /etc/mysql/my.cnf que já possui bind_address = 127.0.0.1. Portanto, apenas o host local pode se conectar.
  2. Eu uso o servidor OpenSSH. Portanto, em seu arquivo de configuração / etc / ssh / sshd_config, mudei de não para yes o parâmetro responsável pelo encaminhamento de TCP, portanto AllowTcpForwarding yes .
  3. Finalmente, eu tenho o seguinte inserido no MySQL WorkBench.

    • Nome do host SSH: 192.168.0.8:22 (meu servidor SSH escuta a porta 22)
    • Nome de usuário SSH: sshuser
    • Arquivo de chave SSH: * C: \ Users \ windowsuser \ .ssh \ id_rsa * (deve ser uma chave privada, mesmo que seja pública)
    • Nome do host do MySQL: 127.0.0.1 (isso não deve ser alterado, uma vez que o servidor MySQL por padrão está vinculado apenas ao host local que não mudei)
    • Porta do servidor MySQL: 3306 (também padrão)
    • Nome de usuário: root

A única coisa que resta para você é configurar corretamente o servidor SSH para funcionar com chaves em vez de senhas. Espero que isso ajude alguém.


Uma coisa que eu precisava fazer no lado do servidor foi garantir que o / etc / ssh / sshd_config possuísse esta linha: AuthorizedKeysFile /home/root/.ssh/authorized_keyse que as chaves_autorizadas tivessem minha chave PUBLIC como entrada.
RyanNerd

Por favor, esclareça se a etapa 2 a qual conjunto AllowTcpForwarding yesé aplicada ao servidor remoto, ou seja, o host que possui a instância do MySQL que estamos tentando conectar; ou a máquina local com MySQL Workbench instalado
Nam G VU

A etapa 2 do @NamGVU se aplica ao servidor remoto em que o MySQL está instalado. Particularmente para o servidor OpenSSH que fornece encapsulamento para o MySQL através do SSH.
Olho

Eu tentei, mas ainda falhei no túnel. O MySQL Workbench me diz para ler mais detalhes do erro no arquivo de log. Você sabe onde ler?
Nam G VU

11
Eu tenho que trabalhar hoje - precisa de uma reinicialização após a configuração da AllowTcpForwardingentrada
Nam G VU

8

Eu acho que a abordagem TCP / IP sobre SSH funciona estabelecendo uma conexão SSH "normal" subjacente à conexão MySQL (da mesma maneira que você usaria o túnel usando -Lo cliente de linha de comando OpenSSH).

Portanto, você precisará especificar uma conexão com um servidor SSH no servidor através do qual você está estabelecendo o túnel. Aqui, você parece estar usando mysql.myhost.com:3306, o que implica que você está executando este servidor SSH (não o MySQL) na porta 3306.

É possível ligar um servidor MySQL em 127.0.0.1:3306 e um servidor SSH no seu endereço IP externo mysql.myhost.comna porta 3306, mas isso é muito improvável. Eu acho que seu servidor SSH está escutando na porta 22 (o padrão).

Você provavelmente deveria usar mysql.myhost.com:22. (Verifique se você pode se conectar a ele por meio de um cliente SSH normal, como o Putty.)


8

Você pode precisar verificar os usuários na tabela mysql.user.

Execute esta consulta:

SELECT user,host FROM mysql.user;

Você deve ver algo assim:

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 note que

  • root @ localhost pode fazer login apenas a partir do localhost.
  • ping @ '%' pode fazer login via TCP / IP
  • admin@10.67.135.% pode efetuar login via TCP / IP somente desse netblock
  • icorbin@10.67.135.% pode efetuar login via TCP / IP somente desse netblock

Se você deseja que o root se conecte via TCP / IP, especifique o endereço IP ou o netblock para um usuário root.

Algo assim:

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

ou se a senha root for a mesma para root @ localhost,

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

CAVEAT: root @ '%' normalmente não é recomendado. Talvez tente root@'10.% 'ou qualquer outro netblock para root.

De uma chance !!!


3
Não deve ...@localhostfuncionar através do túnel SSH, já que, no que diz respeito ao servidor MySQL, a conexão vem do fim do túnel?
Bruno

@ Bruno: Uma maneira de saber é conectar-se com êxito e executar SELECT USER (), CURRENT_USER (); e veja o que ele gera. A função USER () faz eco ao que você tentou se autenticar, enquanto CURRENT_USER () faz eco ao que o MySQL permitiu que você se autentique. Se CURRENT_USER () ecoar root @ localhost, a resposta para sua pergunta é sim.
RolandoMySQLDBA



2

Meu problema foi devido ao fato de eu estar tentando usar uma ed25519chave SSH. Percebi esse erro no servidor SSH em auth.log:

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

Depois que passei a usar uma chave RSA, tudo funcionou como esperado.


1

Você está tentando se conectar ao servidor via ssh, mas usando a porta mysql. A porta que você deseja é o que o servidor ssh estiver ouvindo, normalmente 22, localhost e 3306 para mysql hostname e port.


1

Eu enfrentei o mesmo problema. Eu verifiquei e tentei definir AllowTcpForwarding Sim, mas estava faltando no meu sshd_config, portanto não ajuda. verifique se o nome do host ssh NÃO é o mesmo que o nome do host mysql (use localhost).

No ambiente de trabalho, escolha + para adicionar nova conexão e defina o seguinte:

  • método de conexão: padrão TCP / IP sobre SSH
  • Nome do host SSH: 192.168.0.50:22 (coloque o IP do servidor SSH remoto e a porta (opcional))
  • Nome de usuário SSH: sshuser
  • Você pode definir a senha ou adicionar no prompt
  • Nome do host MYSQL: localhost ou 127.0.0.1
  • Porta do servidor MYSQL: 3306
  • Você pode definir a senha ou adicionar no prompt

Teste a conexão. Deverá ser bem sucedido e clique em OK.Viola!


1

Às vezes, as chaves criadas por PuTTY não funcionam. Use ssh-keygen na caixa Linux para criar um par de chaves. Copie o conteúdo do novo id_rsa para um arquivo de texto no Windows. Certifique-se de adicionar o conteúdo de id_rsa.pub a allowed_keys na caixa Linux. Todos os outros padrões no Workbench são bons, incluindo 127.0.0.1 para MySQL Hostname. Obviamente, ele deve ser TCP / IP padrão sobre SSH.


1

Eu vim com o mesmo erro. O problema é "um pouco" o tempo limite. Aumentei o valor até 120 segundos, o que não ajudou.

No meu caso, eu poderia resolver isso usando um nslookup myserver.com e usando o endereço IP em vez do nome do host. Minha suposição é um problema ao tentar conectar-se do IPv4 ao IPv6.


0

Acabei de ter esse mesmo problema na máquina Ubuntu conectando-se a um servidor executando o MySQL versão 5.5.29 e o MySQL Workbench 5.2.40. O servidor SSH requer o uso de uma chave ssh.

Não consegui me conectar ao servidor MySQL usando o usuário root, ao invés disso, tive que criar um usuário não root separado para usar no login. Depois disso, consegui me conectar muito bem.

Espero que isto ajude.


0

OK, eu sei que essa é uma pergunta antiga, mas eu puxei meu cabelo por várias horas. Eu verifiquei tudo mencionado por Bruno e Eye e tudo parecia bom. Então eu percebi que era realmente uma coisa de chave pública / privada. Então eu iniciei o Pageant e adicionei minha chave privada, para que ela criasse uma chave pública que o MySQL Workbench pudesse ler e pronto, conectada! (Na verdade, foi meio anticlimático quando o MySQL Workbench começou a funcionar, mas de uma maneira feliz.)

TLDR: use o Pageant para gerar uma chave pública a partir da sua chave privada.


As chaves privadas nunca devem ser usadas como chaves públicas, por isso são privadas.
James Anderson

@ JamesAnderson não é esse o problema do bug ? O texto está pedindo privado, deve ler público ... pelo menos de acordo com o link do bug. Ou não?
Thufir

-1

Somente o que encontrei ... frequentemente estou criando usuários no servidor SSH sem shell (como / sbin / nologin) para impedir que eles possam acessar um servidor e criar arquivos e etc lá ... (para sistemas de produção que está fazendo isso em firewalls).

Em um ambiente Linux comum depois disso, você ainda pode encaminhar portas depois, como:

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

e depois disso, conecte-o a partir da estação de trabalho local como:

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

Mas o ambiente de trabalho está dando um erro que não pode se conectar ao MySQL ... Se você alterar o shell para esse usuário, digamos, / bin / bash - tudo funcionará bem depois disso.

Não faço ideia por que o Workbench está exigindo shell local no servidor SSH remoto.


-1

Basta criar uma nova chave RSA com o formato correto para o mysql workbench.

Por exemplo:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.