Túnel SSH via MySQL Workbench

Túnel SSH via MySQL Workbench

meu novo servidor de produção só é visível via túnel duplo ssh. eu posso alcançarhostHostno console 14.04 do Ubuntu simplesmente executando o comando ssh targetHoste depois executando o mysql cli na máquina remota, mas eu gostaria de acessar o banco de dados MySQL pelo gui Workbench. Como configurar a conexão no Workbench para conseguir isso?

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

Responder1

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:

  • Hostname SSH: o endereço do servidor que faz o túnel SSH (servidor SSH e MySQL podem ser o mesmo host ou o mesmo endereço de rede, isso vai 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 configurado modo autenticação por senha).
  • Arquivo de chave SSH: um arquivo que contém a chave privada para autenticação no servidor, caso você tenha habilitado PasswordAuthenticationa política no servidor SSH, tem o valor no).

Valores para conexão ao SGBD MySQL.

  • Nome do host MySQL: O endereço do host no qual o MySQL está executando o serviço, em relação ao servidor SSH. Se o serviço SSH e MySQL estiver sendo executado no mesmo host, o valor leste será localhost ou 127.0.0.1, porque uma vez estabelecida a conexão através do túnel, o serviço MySQL escuta solicitações de localhost (dependendo do valor definido na diretiva bind_adressMySQL).
  • Porta do Servidor MySQL: porta de conexão MySQL, geralmente é 3306.
  • Nome de usuário MySQL: Nome de usuário pelo qual se conectará ao MySQL, ou seja, deve ser um usuário válido do MySQL e estar autorizado para conexão a partir do túnel.
  • Esquema Padrão: Equivalente ao SQL USE.

Responder2

Não quero limpar, se acertarmos sua configuração. Portanto, presumo firewallhostque o host seja acessível a partir do seu Workbench. Portanto, é necessário criar uma porta aberta neste servidor, que possa acessar o servidor mysql 'real' atrás deste firewall.

Tudo bem, se você configurar um túnel ssh persistente no arquivo firewallhost. Isso é feito assim emfirewallhost

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

Isso 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) na firewallhostqual está conectado por meio deste túnel com a porta 3306 (novamente em localhost, mas na máquina databasehost) porque está conectado como someshelluser em databasehost.

E agora você pode se conectar ao ambiente de trabalho:

  • Nome do host SSH:firewallhost
  • Nome de usuário SSH: algum usuário válido emfirewallhost
  • Senha SSH: sua senha para algum usuário válido
  • Arquivo de chave SSH: alternativa a um arquivo de chave

  • Nome do host MySQL: localhost(conforme abrimos um túnel no firewallhosthost local de)

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

Para ter o túnel ssh firewallhostpersistente, você pode iniciá-lo da seguinte maneira com um arquivo-chave (para acessar databasehost) e um processo desanexado através da tela. Isso pode ser colocado no seu rc.local ou em qualquer coisa que você use no 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 em que você cria esse túnel ssh (aqui firewallhost). Isso pode ser feito até no nic público de firewallhost, mas você quer isso no host local, pois não quer expor sua porta mysql ao público;)

ATUALIZAR:

Ok, como você não tem acesso direto firewallhostpara criar um túnel persistente, tente de outra forma. Você disse que consegue se conectar com o proxycommand. Como você escreveu inline e não como opção '-o', presumo que você tenha isso em seu ssh_config.

Se o seu ssh_config estiver assim:

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

Então você poderia tentar o seguinte como 'Nome de host SSH'na bancada. Com sorte, você pode fornecer parâmetros ssh com ele. Eu não testei, mas não é incomum que o aplicativo passe 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

Isso deve levá-lo ao seu servidor mysql através do seu firewallhost. A partir daqui, suas configurações do mysql podem ser usadas como se você fosse se conectar diretamente ao mysqlserver conforme o ambiente de trabalho espera.

ATUALIZAÇÃO2:

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 firewallhost, você deve apenas usar os valores no ambiente de trabalho 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 ao qual o .ssh/config se destina.

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 SSH é 'nome de usuário' (de .ssh/config novamente).

O nome do host MySQL deve ser localhost e porta 3306 - deve ser exatamente como você faz ao acessar o 'targetHost' por ssh, conforme escreveu em sua pergunta. Porque o workbench usará esses valores depois (!) de se conectar por ssh.

informação relacionada