conectando ao mysql sobre o ssh

4

Todos os computadores envolvidos são máquinas Mac OS X 10.6.x.

Eu estou no computador A, e tenho o mysql rodando nele, e posso me conectar a ele como A~ $ mysql -u punkish -p database e assim por diante.

Eu tenho acesso ao computador B que também tem o mysql rodando nele. Eu posso ssh em B através da porta 2200 com os pares de chaves ssh configurados, e uma vez em, eu posso conectar ao banco de dados como assim

A~ $ ssh -p 2200 punkish@B
B~ $ mysql -u punkish -p database

No entanto, eu quero configurar o encaminhamento de porta por ssh no meu computador para que todos os pedidos feitos para o mysql na porta 3307 no meu computador A sejam realmente enviados para a porta 3306 em B. Isso me permitirá usar um programa gui (Quantum GIS) que quer se conectar ao mysql, mas não pode fazê-lo em um túnel. Então, eu faço o seguinte

A~ $ ssh -p 2200 -L 3307:B:3306 punkish@B
B~ $

O acima me registra em B. Não tenho certeza se o túnel está estabelecido, mas estou assumindo que é. No entanto, o seguinte falha (em outro terminal

A~ $ mysql -P 3307 -u punkish -p
Enter password:
ERROR 1045 (28000): Access denied for user 'punkish'@'localhost' (using password: YES)

Aqui está a coisa interessante - eu tenho outro programa gui chamado Sequel Pro (um cliente MySQL de desktop para Mac OS X), e que é capaz de fazer uma conexão com o mysql @ B através do ssh. Então, eu sei que alguma coisa funciona ... Eu só não sei como.

Respondendo a minha própria pergunta (porque não posso responder em menos de 8 horas)

Eu descobri uma solução, mas não entendo o porquê. Aqui vai -

Eu estava usando o seguinte comando para fazer um túnel

user@compt_A ~$ssh -p 2200 -L 3307:compt_B:3306 ssh_user@compt_B cat -

Eu tenho que mudar o acima para

user@compt_A ~$ssh -p 2200 -L 3307:127.0.0.1:3306 ssh_user@compt_B cat -

Agora os seguintes trabalhos

user@compt_A ~$mysql -P 3307 -p -h 127.0.0.1 -u <db user@compt_B>

A razão que não faz sentido para mim é porque o primeiro comando diz: "estabelecer um túnel SSH pela porta 2200, encaminhando a porta local 3307 para a porta 3306 no computador B" e isso faz mais sentido do que "estabelecer um Túnel SSH pela porta 2200, encaminhando a porta local 3307 para a porta 3306 em 127.0.0.1 "

No entanto, funciona.

Ah, fwiw, se eu usar o primeiro comando, então o comando mysql falha com a mensagem

ERROR 1130 (HY000): Host 'compt_A' is not allowed to connect to this MySQL server
    
por punkish 08.07.2011 / 21:32

2 respostas

1

Use o telnet para testar se o túnel está aberto. "telnet HOSTNAME PORTNUMBER" se ele se conecta, a porta é acessível a partir da máquina de onde você iniciou a conexão.

Você também pode se preocupar com a opção "-g" para clientes ssh:

-g Allows remote hosts to connect to local forwarded ports.

Eu sempre encontro um túnel que não pode ser aberto, então quando eu obtenho um shell na máquina remota, vejo uma mensagem ser reportada logo antes do terminal ser impresso pela primeira vez, informando que o túnel não pôde ser estabelecido. / p>     

por 08.07.2011 / 21:37
0

Talvez você não precise ssh na máquina, tudo o que você precisa fazer é informar ao MySQL que os clientes de sua rede têm permissão para acessar essa máquina. Dê uma olhada no subsídio e criar usuário .

link
link

Em nosso escritório, se eu criar um banco de dados na máquina A e quiser que todos os corpos na rede 172.16.0.1/24 ou 192.168.0.1/24 possam acessá-la se souberem o nome de usuário "office_user" e senha "office_pass". Eu preciso conceder declaração que me permitirá usar o cliente mysql lá na máquina no escritório para se conectar a qualquer banco de dados que eu dê acesso a ele.

Esta é a maneira rápida e insegura de criar um usuário no escritório que pode fazer qualquer coisa no banco de dados MySQL de qualquer uma das redes. Use isso somente quando estiver fazendo testes simples e em um servidor que não seja de produção. Ele dá ao usuário "office_user" acesso quase completo a todos os bancos de dados no servidor MySQL.

CREATE USER 'office_user'@'172.16.0.%' IDENTIFIED BY 'office_pass';
CREATE USER 'office_user'@'192.168.0.%' IDENTIFIED BY 'office_pass'; GRANT ALL PRIVILEGES ON . TO 'office_user'@'172.16.0.%' IDENTIFIED BY 'office_pass';
FLUSH PRIVILEGES;

Observe que esse usuário não funcionará no host local, pois eu não incluí um

CREATE USER 'office_user'@'localhost' IDENTIFIED BY 'office_pass';

Não, você pode entrar no seu servidor mysql hospedado no endereço IP 172.16.0.20

mysql -u office_user -h 172.16.0.20 -p"office_pass"

Com mais segurança, você pode conceder seu próprio acesso com privilégios apenas no banco de dados "office_db" que você precisa para o seu software GIS. Onde seu endereço IP é 172.16.0.20.

CREATE USER 'office_user'@'172.16.0.20' IDENTIFIED BY 'office_pass'; GRANT ALL PRIVILEGES ON office_db.* TO 'office_user'@'172.16.0.20' IDENTIFIED BY 'office_pass';
FLUSH PRIVILEGES;

Você usa o mesmo login, mas ele só terá acesso ao banco de dados especificado

mysql -u office -h 172.16.0.20 -p"office_pass" office_db

Você pode tornar isso ainda mais seguro, dando a si mesmo os privilégios de que precisa, como selecionar e soltar. Vá e leia a documentação da declaração de concessão

    
por 22.05.2012 / 16:19