12 marzo 2009
Tunel SSH Permanentes entre Servidores Linux
Vuelvo a mis fueros técnicos con una traducción (un poco libre) de un artículo en Inglés sobre el tema que marca el título. Que lo disfrutéis.
Si estás leyendo esto es que quieres conectar un servicio entre dos máquinas comunicadas por un canal no seguro através de ssh. Suponemos que ese servicio es mysql, pero puede ser cualquier otro y solo hay que modificar los scripts para que usen el puerto correspondiente.
Planteamiento del escenario:
Los requerimientos son:
Pasos:
Crear un usuario ‘tunnel’ en HostA:
Crear un par de claves pública/privada
Ahora creamos el script /home/tunnel/check_ssh_tunnel.sh en HostA
Ahora solo añade el script al crontab del usuario 'tunnel' para que se compruebe la conexión cada pocos minutos. Automáticamente reconectará el tunel si algo falla. Cuando crea una nueva conexión enviará un correo al usuario definido en el crontab.
0 Comentarios
Si estás leyendo esto es que quieres conectar un servicio entre dos máquinas comunicadas por un canal no seguro através de ssh. Suponemos que ese servicio es mysql, pero puede ser cualquier otro y solo hay que modificar los scripts para que usen el puerto correspondiente.
Planteamiento del escenario:
------------ -----------------
-- HOST A -- --------- Internet ------------ HOST B --
-- -- -- ssh y mysql --
------------ -----------------
Los requerimientos son:
- Un servidor ssh en HostB
- Un servidor mysql en HostB
- Un cliente ssh en HostA que pueda establecer conexión con HostB
- Un cliente mysql en HostA
Pasos:
Crear un usuario ‘tunnel’ en HostA:
[root@hosta ~]# useradd -d /home/tunnel tunnel
[root@hosta ~]# passwd tunnel ## Un pasword fuerte
[root@hosta ~]# su - tunnel ## Convertirse en el usuario 'tunnel'
Crear un par de claves pública/privada
[tunnel@hosta ~]$ ssh-keygenAhora usa cat para ver el fichero id_rsa.pub que contiene la clave pública que necesitas pner en HostB.
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tunnel/.ssh/id_rsa): ## pulsar enter
Enter passphrase (empty for no passphrase): ## no usar password
Enter same passphrase again:
Your identification has been saved in /home/tunnel/.ssh/id_rsa.
Your public key has been saved in /home/tunnel/.ssh/id_rsa.pub.
The key fingerprint is:
6f:30:b8:e1:36:49:74:b9:32:68:6e:bf:3e:62:d3:c2 tunnel@hosta
[tunnel@hosta ~]# cat /.ssh/id_rsa.pubAhora crea un usuario 'tunnel' en HostB y guarda la clave pública de tunnel@HostA en el fichero de claves autorizadas:
ssh-rsa blahAAAAB3NzaC1yc2EAAAABIwAAAQEA......6BEKKCxTIxgBqjLP tunnel@hosta
[root@hostb ~]# useradd -d /home/tunnel tunnelEn este momento deberías poder conectarte desde HostA a HostB con el usuario tunnel sin usar un passwrod. Depende de tu configuración, es posible que debas añadir al usuario 'tunnel' a los usuarios permitidos en /etc/ssh/sshd_config. También es posible que quieras cambiar algunas opciones de SSh, como el puerto de destino, en ~/.ssh/config.
[root@hostb ~]# passwd tunnel ## Un pasword fuerte
[root@hostb ~]# su - tunnel
[tunnel@hostb ~]# mkdir .ssh
[tunnel@hostb ~]# vi .ssh/authorized_keys ## Now paste in the public key for tunnel@hosta
Ahora creamos el script /home/tunnel/check_ssh_tunnel.sh en HostA
createTunnel() {Guardamos el fichero y lo hacemos ejecutable:
/usr/bin/ssh -f -N -L13306:hosta:3306 -L19922:hosta:22 tunnel@hostb
if [[ $? -eq 0 ]]; then
echo Tunnel to hostb created successfully
else
echo An error occurred creating a tunnel to hostb RC was $?
fi
}
## Run the 'ls' command remotely. If it returns non-zero, then create a new connection
/usr/bin/ssh -p 19922 tunnel@localhost ls
if [[ $? -ne 0 ]]; then
echo Creating new tunnel connection
createTunnel
fi
chmod 700 ~/check_ssh_tunnel.shEl script intenta conectarse al puerto local 19922 y ejecutar el comando ls. Si falla, intenta crear el tunel SSH. El comando para crear el tunel SSH, tunelará el puerto local 13306 al puerto 3306 de HostB. Puedes modificar aquí lo necesario para que los puertos se adecuen a tus necesidades. También crea un tunel del puerto local 19922 al puerto 22 en HostB que comprobar la conexión.
Ahora solo añade el script al crontab del usuario 'tunnel' para que se compruebe la conexión cada pocos minutos. Automáticamente reconectará el tunel si algo falla. Cuando crea una nueva conexión enviará un correo al usuario definido en el crontab.
Etiquetas: linux, mysql, script, ssh, tunel
0 Comentarios