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?

Dizzley
fonte
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.

Olho
fonte
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.)

Bruno
fonte
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
  • [email protected].% pode efetuar login via TCP / IP somente desse netblock
  • [email protected].% 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 !!!

RolandoMySQLDBA
fonte
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
3

Você pode estar usando uma versão mais antiga do MySQL Workbench e precisa atualizar. Este é um erro na versão 6.0.8, que atualmente é a versão nos repositórios do Ubuntu. A atualização para a versão 6.3.6 corrigiu isso para mim.

Downloads aqui: http://dev.mysql.com/downloads/workbench/#downloads

Gleasonator
fonte
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.

jbiz
fonte
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.

Justin Buser
fonte
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!

Reegan Ochora
fonte
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.

Mcmacerson
fonte
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.

Markus Zeller
fonte
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.

Kyle Coots
fonte
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.

Bonnie
fonte
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.

user251897
fonte
-1

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

Por exemplo:

ssh-keygen -t rsa -b 4096 -C "[email protected]"
vontade vontade
fonte