SSH tunnel via MySQL Workbench

5

meu novo servidor de produção só é visível por meio do túnel duplo ssh. Eu posso chegar a targetHost através do console 14.04 do Ubuntu simplesmente executando o comando ssh targetHost e a executar o mysql cli na máquina remota, mas eu gostaria de acessar o banco de dados MySQL sobre o gui Workbench. Como configurar a conexão no Workbench para alcançá-lo?

Meu .ssh / config :

Host targetHost,  firewallHost
    User username
    IdentityFile /home/michalszulc/.ssh/id_rsa

Host targetHost
    proxycommand ssh -W %h:%p firewallHost

Host firewallHost
    hostname firewallHost.example.com
    port 2201
    passwordauthentication no
    controlmaster auto
    controlpath ~/

Host targetHost
    Hostname 123.123.123.123
    
por Michal_Szulc 26.09.2016 / 17:17

2 respostas

3

O processo é simples. Crie uma nova conexão e escolha o método de conexão TCP / IP padrão sobre SSH. Valores para o servidor SSH que fornece o túnel:

  • Nome do host SSH: o endereço do servidor que faz o túnel SSH (o servidor SSH e o MySQL podem ser o mesmo host ou o mesmo endereço de rede, isso dependerá da configuração).
  • Nome de usuário SSH: nome de usuário no servidor SSH.
  • Senha SSH: Senha do usuário no servidor SSH (se autenticação de senha do modo configurado).
  • Arquivo de chave SSH: Um arquivo contendo a chave privada para autenticação no servidor, se você tiver habilitado o PasswordAuthentication policy no servidor SSH, tem o valor no ).

Valores para conexão ao DBMS MySQL.

  • MySQL Hostname: O endereço do host no qual o MySQL está executando o serviço, com relação ao servidor SSH. Se o serviço SSH e MySQL estiver sendo executado no mesmo host, o valor eastbound é localhost ou 127.0.0.1, porque uma vez que a conexão através do túnel é estabelecida, o serviço MySQL atende aos pedidos do host local (dependendo do valor definido na diretiva bind_adress MySQL).
  • Porta do servidor MySQL: porta de conexão MySQL, geralmente é 3306.
  • Nome de usuário do MySQL: Nome do usuário pelo qual ele se conectará ao MySQL, ou seja, ele deve ser um usuário válido do MySQL e ser autorizado para conexão a partir do túnel.
  • Esquema padrão: equivalente ao SQL USE.
por 06.10.2016 / 12:33
1

Não limpar, se tivermos a configuração correta. Então eu assumo que firewallhost é o host acessível a partir do seu Workbench. Portanto, é necessário criar uma porta aberta neste servidor, que pode acessar o servidor mysql 'real' por trás desse firewall.

Não há problema em configurar um túnel ssh persistente no firewallhost . Isso é feito assim em firewallhost

ssh -L localhost:33060:localhost:3306 someshelluser@databasehost

Isto cria um túnel openssh para localhost (não público em qualquer nic) na porta 33060 (ou qualquer porta que você tenha livre aqui) no firewallhost que está em retorno conectado através deste túnel com a porta 3306 (novamente no localhost mas na máquina databasehost ) porque está conectado como someshelluser em databasehost .

E agora você pode se conectar com o ambiente de trabalho:

  • Nome do host SSH: firewallhost
  • Nome de usuário SSH: algum usuário válido em firewallhost
  • Senha do SSH: seu passe para algum usuário válido
  • Arquivo-chave SSH: alternativa a um arquivo-chave

  • Nome do host do MySQL: localhost (quando abrimos um túnel no localhost de firewallhost )

  • Porta do servidor MySQL: 33060
  • Nome de usuário do MySQL: seu usuário do mysql

Para ter o túnel ssh em firewallhost persistente, você pode iniciá-lo da seguinte forma com um arquivo de chaves (para acessar databasehost ) e uma tela de processo separado através de. Isso pode ser colocado em seu rc.local ou o que você usa em firewallhost .

screen -d -m /usr/bin/ssh -v -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "BatchMode=yes" -i /your/.ssh/ssh_host_dsa_key -q -L locahost:33060:localhost:3306 someshelluser@databasehost

Você deve apenas 'imaginar' que tal túnel ssh pode 'transportar' qualquer fluxo de porta de uma máquina para outra, abrindo uma 'nova' porta na máquina que você criar aquele túnel ssh (aqui firewallhost ). Isso pode ser feito até mesmo no nic público de firewallhost , mas você quer no localhost como você não quer expor sua porta mysql para o público;) Espero que isso ajude!

ATUALIZAÇÃO:

Ok, como você não tem acesso direto a firewallhost para criar um túnel persistente, tente de outra forma. Você disse que é capaz de se conectar com o comando proxy. Como você escreveu em linha e não como opção '-o', eu suponho que você tenha isso em seu ssh_config.

Se o seu ssh_config se parece com isto:

Host server
    Hostname mysqlserver.example.org
    ProxyCommand ssh -W %h:%p firewallhost.example.org

Então você pode tentar o seguinte como ' SSH Hostname ' no ambiente de trabalho. Com chance, você tem permissão para dar ssh params com isso. Eu não testei, mas não é unusal para o aplicativo passar o conteúdo dos campos Hostname diretamente para a chamada ssh.

Nome do host SSH:

-o ProxyCommand="ssh -W %h:%p firewallhost.example.org" mysqlserver.example.org

Isto deve trazê-lo para o seu mysqlserver através do seu host de firewall. A partir daqui, suas configurações do mysql podem ser usadas como se você se conectasse diretamente ao mysqlserver como o ambiente de trabalho está esperando.

UPDATE2:

Como você escreveu, você está na mesma máquina (Ubuntu 14) que é capaz de se conectar ao seu banco de dados mysql por trás de firewallhost , você deve apenas usar os valores no workbench que você usa no console. O ambiente de trabalho usará seu .ssh / config se você chamar o ambiente de trabalho com o mesmo usuário que o .ssh / config é para.

Finalmente:

O nome do host SSH seria apenas 'targetHost', onde o comando proxy do seu .ssh / config irá encaminhá-lo para 'targetHost' através de 'firewallHost'. O nome de usuário do SSH é 'username' (de .ssh / config novamente).

O MySQL Hostname deve ser localhost e a porta 3306 - que deve ser exatamente como você faz ao acessar o 'targetHost' por ssh como você escreveu em sua pergunta. Porque o ambiente de trabalho usará esses valores depois de (!) Se conectar por ssh.

    
por 07.10.2016 / 12:59