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 targetHost
y 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
PasswordAuthentication
la política en el servidor SSH tiene el valorno
).
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_adress
MySQL). - 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 firewallhost
que 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 firewallhost
el 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 en
firewallhost
- 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 enfirewallhost
el host local)- Puerto del servidor MySQL: 33060
- Nombre de usuario de MySQL: su usuario de MySQL
Para que el túnel ssh sea firewallhost
persistente, 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 firewallhost
para 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.