Túnel SSH a través de MySQL Workbench

Túnel SSH a través de MySQL Workbench

Mi nuevo servidor de producción sólo es visible a través del doble túnel ssh. puedo alcanzarobjetivoHosten la consola 14.04 de Ubuntu simplemente ejecutando el comando ssh targetHosty luego ejecutando mysql cli en una máquina remota, pero me gustaría acceder a MySQL db a través de gui Workbench. ¿Cómo configurar la conexión en Workbench para lograrlo?

Mi.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

Respuesta1

El proceso es simple. Cree una nueva conexión y elija el método de conexión TCP/IP estándar sobre SSH. Valores para el servidor SSH que proporciona el túnel:

  • SSH Hostname: la dirección del servidor que hace el túnel SSH (el servidor SSH y MySQL pueden ser el mismo host o la misma dirección de red, esto dependerá de la configuración).
  • Nombre de usuario SSH: nombre de usuario en el servidor SSH.
  • Contraseña SSH: Contraseña de usuario en el servidor SSH (si está configurado el modo de autenticación de contraseña).
  • Archivo de clave SSH: un archivo que contiene la clave privada para la autenticación en el servidor si ha habilitado PasswordAuthenticationla política en el servidor SSH tiene el valor no).

Valores para conexión a DBMS MySQL.

  • Nombre de host MySQL: la dirección del host en el que MySQL ejecuta el servicio, con respecto al servidor SSH. Si el servicio SSH y MySQL se ejecutan en el mismo host, el valor en dirección este es localhost o 127.0.0.1, porque una vez que se establece la conexión a través del túnel, el servicio MySQL escucha las solicitudes de localhost (dependiendo del valor establecido en la directiva bind_adressMySQL).
  • Puerto del servidor MySQL: puerto de conexión MySQL, generalmente es 3306.
  • MySQL Username: Nombre de usuario con el que se conectará a MySQL, es decir tiene que ser un usuario válido de MySQL y estar autorizado para conectarse desde el túnel.
  • Esquema predeterminado: Equivalente al USE de SQL.

Respuesta2

No lo aclararé si conseguimos que su configuración sea correcta. Así que supongo firewallhostque se puede acceder al host desde su Workbench. Por lo tanto, es necesario crear un puerto abierto en este servidor, que pueda acceder al servidor MySQL "real" detrás de este firewall.

Eso está bastante bien, si configura un túnel ssh persistente en el archivo firewallhost. Eso se hace así enfirewallhost

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

Esto crea un túnel openssh para localhost (no público en ninguna NIC) en el puerto 33060 (o cualquier puerto que tenga libre aquí) en firewallhostel que a cambio está conectado a través de este túnel con el puerto 3306 (nuevamente en localhost pero en la máquina databasehost) porque está conectado como algún usuario shell en databasehost.

Y ahora puedes conectarte con el banco de trabajo:

  • Nombre de host SSH:firewallhost
  • Nombre de usuario SSH: algún usuario válido enfirewallhost
  • Contraseña SSH: tu pase para algún usuario válido
  • Archivo de clave SSH: alternativa a un archivo de claves

  • Nombre de host MySQL: localhost(cuando abrimos un túnel en firewallhostel host local)

  • Puerto del servidor MySQL: 33060
  • Nombre de usuario de MySQL: su usuario de MySQL

Para que el túnel ssh sea firewallhostpersistente, puede iniciarlo allí de la siguiente manera con un archivo de claves (para acceder databasehost) y un proceso independiente a través de la pantalla. Esto se puede poner en su rc.local o en cualquier lugar que use 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

Simplemente debe "imaginar" que dicho túnel ssh puede "transportar" cualquier flujo de puerto de una máquina a otra abriendo un "nuevo" puerto en la máquina en la que crea ese túnel ssh (aquí firewallhost). Esto incluso se puede hacer en la NIC pública de firewallhost, pero lo desea en localhost ya que no desea exponer su puerto MySQL al público;)

ACTUALIZAR:

Bien, como no tienes acceso directo firewallhostpara crear un túnel persistente, prueba de otra manera. Dijiste que puedes conectarte con proxycommand. Como lo escribiste en línea y no como la opción '-o', supongo que tienes esto en tu ssh_config.

Si su ssh_config se ve así:

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

Entonces podrías probar lo siguiente como 'Nombre de host SSH' en el banco de trabajo. Con la posibilidad, puedes proporcionar parámetros ssh con él. No lo probé, pero no es inusual que la aplicación pase el contenido de los campos de nombre de host directamente a la llamada ssh.

Nombre de host SSH:

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

Esto debería llevarlo a su servidor mysql a través de su servidor de firewall. Desde aquí, su configuración de MySQL se puede utilizar como si se conectara directamente al servidor MySQL como lo espera el banco de trabajo.

ACTUALIZACIÓN2:

Como escribiste, estás en la misma máquina (Ubuntu 14) que puede conectarse a tu base de datos MySQL firewallhost, solo debes usar los valores en el banco de trabajo que usas en la consola. El banco de trabajo utilizará su .ssh/config si llama al banco de trabajo con el mismo usuario para el que es el .ssh/config.

Finalmente:

El nombre de host SSH sería simplemente 'targetHost' donde el comando proxy de su .ssh/config lo conectará a 'targetHost' a través de 'firewallHost'. El nombre de usuario SSH es 'nombre de usuario' (de .ssh/config nuevamente).

El nombre de host de MySQL debe ser localhost y el puerto 3306; debería ser exactamente como lo hace cuando accede al 'targetHost' mediante ssh, como escribió en su pregunta. Debido a que Workbench usará estos valores después (!) de conectarse mediante ssh.

información relacionada