Aquí intervienen tres máquinas.
- Localhost donde hago mi desarrollo. También conocido como computadora portátil.
- Host bastión donde debes conectarte primero. También conocido como salto.
- Servidor MySQL al que quiero conectarme. También conocido como DB.
Mi clave pública ssh está en /home/myusername/.ssh/authorized_keys al saltar.
Mi ~/.ssh/config tiene esto:
Host jump
HostName jump.domain.com
User myusername
IdentityFile ~/.ssh/myprivatekey
Puedo ssh jump
y me pongo a saltar bien.
¿Qué comando ssh necesito ejecutar en la terminal de la computadora portátil para poder conectarme desde la computadora portátil a la base de datos a través de
mysql -h 127.0.0.1 -P 3308
Necesito un túnel SSH y un reenvío de puertos, pero todavía tengo que corregir la sintaxis. Quiero usar 3308 para la base de datos de producción y 3307 para la base de datos provisional y estoy ejecutando una base de datos MySQL local en 3306, razón por la cual se reenvía el puerto a puertos MySQL no estándar.
Respuesta1
Esto es lo que terminé usando:
ssh -f -L3307:staging.mysql-server.com:3306 jump sleep 10000000
ssh -f -L3308:production.mysql-server.com:3306 jump sleep 10000000
que es dehttp://csce.uark.edu/~kal/info/private/ssh/ch09_02.htmsección 9.2.6
Nota: Al contrario de la pregunta que hice, no se necesita ningún proxyCommand, solo la combinación correcta de opciones de línea de comando ssh.
Respuesta2
El comando es ssh -fL <mysql db port>:<mysql server url>:<mysql db port> <username>@<bastian url> '<remote command>'
.
Respuesta3
Puede utilizar el siguiente .ssh/config suponiendo que se conecte de la máquina A a la C, a través de la máquina B
Host B
User username_on_b
Hostname ip_of_b
IdentityFile ~/.ssh/key_for_b
Host C
User username_on_c
Hostname ip_of_c
IdentityFile ~/.ssh/key_for_c
Localforward 3308 ip_of_your_sql_server:3306
Proxyjump B
# or old-fashion
# Proxycommand ssh B nc %h %p
Luego simplemente escribe desde A:
ssh C
Entonces desde A, puedes
mysql -P 3308 -H localhost