LinuxParty

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

Ahora que puede crear varios túneles SSH hacia adelante o hacia atrás con muchas opciones e incluso simplificar su vida ~/.ssh/config, probablemente también quiera saber cómo hacer que un túnel sea persistente. Por persistente me refiero a que se asegura de que el túnel siempre funcione. Por ejemplo, una vez que se agote el tiempo de espera de su conexión ssh (por tiempo de espera del lado del servidor), su túnel debe restablecerse automáticamente.

Sé que hay muchos guiones que intentan hacer eso de alguna manera. Algunos scripts usan un bucle while, otros lo alientan a ejecutar un comando remoto (como tail) para asegurarse de que no se agote el tiempo de espera y varios otros. Pero, en realidad, no desea reinventar la rueda y ceñirse a las soluciones ya existentes a prueba de balas. Entonces, el cambio de juego aquí es AutoSSH

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L 5000:localhost:3306 Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

o completamente configurado (vía ~/.ssh/config) para uso en segundo plano

autossh -M 0 -f -T -N cli-mysql-tunnel

 

¿Qué es AutoSSH?

Autossh es un programa para iniciar una copia de ssh y monitorearlo, reiniciándolo según sea necesario si muere o deja de pasar tráfico.

Instalar AutoSSH

Cómo instalar AutoSSH en varios sistemas a través de su administrador de paquetes.

SO Método de instalación
Debian / Ubuntu $ sudo apt-get install autossh
CentOS / Fedora / RHEL $ sudo yum install autossh
ArchLinux $ sudo pacman -S autossh
FreeBSD # pkg install autossh
o
# cd /usr/ports/security/autossh/ && make install clean
OSX $ brew install autossh

Alternativamente, también puede compilar e instalar AutoSSH desde la fuente:

wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz
gunzip -c autossh-1.4e.tgz | tar xvf -
cd autossh-1.4e
./configure
make
sudo make install

Nota: asegúrese de obtener la última versión.

Uso básico

usage: autossh [-V] [-M monitor_port[:echo_port]] [-f] [SSH_OPTIONS]

Ignora -M por ahora. -V simplemente muestra la versión y sale. La parte importante a recordar es que -f (ejecutar en segundo plano) no se pasa al comando ssh, sino que se maneja por autossh sí mismo. Aparte de eso, puede usarlo como lo haría con ssh para crear túneles hacia adelante o hacia atrás.

Tomemos el ejemplo básico de la primera parte de esta serie de artículos (reenviar un puerto MySQL remoto a mi máquina local en el puerto 5000):

ssh -L 5000:localhost:3306 cytopia@everythingcli.org

Esto simplemente se puede convertir en un comando autossh:

autossh -L 5000:localhost:3306 Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

Esto es básicamente todo. No hay mucha magia aquí.

Nota 1: antes de usar autossh, asegúrese de que la conexión funcione como se espera probándola ssh primero.

Nota 2: asegúrese de utilizar la autenticación de clave pública / privada en lugar de la autenticación basada en contraseña cuando utilice -f. Esto es necesario tanto para sshcomo para autossh, simplemente porque en una ejecución en segundo plano no se puede ingresar una frase de contraseña de forma interactiva.

AutoSSH y -M (puerto de monitoreo)

Con -M AutoSSH enviará datos continuamente de un lado a otro a través del par de puertos de monitoreo para realizar un seguimiento de una conexión establecida. Si ya no se transmiten datos, se reiniciará la conexión. La monitorización especificada y el puerto directamente encima (+1) deben estar libres. El primero se utiliza para enviar datos y el de arriba para recibir datos.

Desafortunadamente, esto no es demasiado útil, ya que debe asegurarse de que ambos puertos (el especificado y el que está directamente arriba) estén libres (no se usen). Entonces, para superar este problema, existe una mejor solución:

ServerAliveInterval  y   ServerAliveCountMax- hacen que el cliente SSH envíe tráfico a través del enlace cifrado al servidor. Esto mantendrá viva la conexión cuando no haya otra actividad y también cuando no reciba ningún dato vivo, le dirá a AutoSSH que la conexión está rota y AutoSSH luego reiniciará la conexión.

La página de manual de AutoSSH también recomienda la segunda solución:

-M [:echo_port],


En muchos sentidos, estas [opciones ServerAliveInterval y ServerAliveCountMax] pueden ser una mejor solución que el puerto de monitoreo.

Puede deshabilitar el puerto de monitoreo AutoSSH incorporado dándole un valor de 0:

autossh -M 0

Además, también tendrá que especificar valores para ServerAliveIntervalyServerAliveCountMax

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3"

Así que ahora el comando de túnel completo se verá así:

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L 5000:localhost:3306 Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Opción Descripción
ServerAliveInterval ServerAliveInterval: número de segundos que esperará el cliente antes de enviar un paquete nulo al servidor (para mantener viva la conexión).
Por defecto: 30
ServerAliveCountMax Establece el número de mensajes activos del servidor que se pueden enviar sin que ssh reciba ningún mensaje del servidor. Si se alcanza este umbral mientras se envían mensajes de servidor activo, ssh se desconectará del servidor y finalizará la sesión.
Predeterminado: 3

AutoSSH y ~/.ssh/config

En el artículo anterior pudimos simplificar el comando del túnel a través de ~/.ssh/config. Afortunadamente, autossh también conoce este archivo, por lo que aún podemos mantener nuestra configuración allí.

Esta fue nuestra configuración muy personalizada para túneles ssh que tenían puertos personalizados y claves rsa personalizadas:

$ vim ~/.ssh/config
 Host cli-mysql-tunnel
    HostName      everythingcli.org
    User          cytopia
    Port          1022
    IdentityFile  ~/.ssh/id_rsa-cytopia@everythingcli
    LocalForward  5000 localhost:3306

También podemos agregar las opciones ServerAliveIntervaly ServerAliveCountMaxa ese archivo para facilitar aún más las cosas.

$ vim ~/.ssh/config
 Host cli-mysql-tunnel
    HostName      everythingcli.org
    User          cytopia
    Port          1022
    IdentityFile  ~/.ssh/id_rsa-cytopia@everythingcli
    LocalForward  5000 localhost:3306
    ServerAliveInterval 30
    ServerAliveCountMax 3

Si recuerda todas las opciones ssh que ya habíamos usado, ahora podemos simplemente iniciar el túnel autossh así:

autossh -M 0 -f -T -N cli-mysql-tunnel

Variables de entorno de AutoSSH

AutoSSH también se puede controlar mediante un par de variables ambientales. Son útiles si desea ejecutar AutoSSH sin supervisión mediante cronscripts de shell o durante el tiempo de arranque con la ayuda de systemdservicios. La variable más utilizada es probablemente AUTOSSH_GATETIME:

AUTOSSH_GATETIME
Cuánto tiempo debe estar activo ssh antes de que consideremos que es una conexión exitosa. El valor predeterminado es 30 segundos. Si se establece en 0, este comportamiento está deshabilitado y, además, autossh volverá a intentarlo incluso si falla el primer intento de ejecutar ssh.

Establecer AUTOSSH_GATETIMEen 0 es más útil cuando se ejecuta AutoSSH en el momento del arranque.

Todas las demás variables ambientales, incluida la que alguna vez fue responsable de las opciones de registro, se pueden encontrar en el archivo Léame de AutoSSH .

AutoSSH durante el arranque con systemd

Si desea un túnel SSH permanente ya creado durante el tiempo de arranque, tendrá (hoy en día) que crear un servicio systemd y habilitarlo. Sin embargo, hay una cosa importante a tener en cuenta sobre systemd y AutoSSH: -f(uso en segundo plano) ya lo implica AUTOSSH_GATETIME=0, sin embargo, no -fes compatible con systemd.

http://www.freedesktop.org/software/systemd/man/systemd.service.html
[…] ejecutar programas en segundo plano usando “&” y otros elementos de la sintaxis de shell no son compatibles.

Entonces, en el caso de que systemdtengamos que hacer uso de AUTOSSH_GATETIME. Veamos un servicio muy básico:

$ vim /etc/systemd/system/autossh-mysql-tunnel.service
[Unit]
Description=AutoSSH tunnel service everythingcli MySQL on local port 5000
After=network.target

[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NL 5000:localhost:3306 Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. -p 1022

[Install]
WantedBy=multi-user.target

Dígale a systemd que hemos agregado algunas cosas:

systemctl daemon-reload

Iniciar el servicio

systemctl start autossh-mysql-tunnel.service

Habilitar durante el arranque

systemctl enable autossh-mysql-tunnel.service

_

Esto es básicamente todo lo que encontré útil sobre AutoSSH. Si crees que me he perdido algunas partes importantes o si sabes alguna otra cosa interesante, avísame y actualizaré esta publicación.

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías

Nos obligan a moslestarte con la obviedad de que este sitio utiliza Cookies. Ver política