LinuxParty
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 ssh
como 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 ServerAliveInterval
yServerAliveCountMax
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 ServerAliveInterval
y ServerAliveCountMax
a 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 cron
scripts de shell o durante el tiempo de arranque con la ayuda de systemd
servicios. 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_GATETIME
en 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 -f
es 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 systemd
tengamos 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.
-
Seguridad
- Los televisores inteligentes son como un «caballo de Troya digital» en los hogares
- Snort para Windows, detección de Intrusos y seguridad.
- Detección de Intrusiones con las herramientas: BASE y Snort.
- El Sistema de Detección de Intrusos: Snort. ( Windows y Linux )
- Configuración con Ejemplos de Snort para Windows, detección de intrusiones
- ¿El gobierno de EE. UU. ignoró la oportunidad de hacer que TikTok fuera más seguro?
- ¿Qué es SSH y cómo se utiliza? Los conceptos básicos de Secure Shell que necesitas saber
- Asegurar memcached del servidor, para evitar amplificar ataques DDoS
- Consejos de Seguridad para Pagos Móviles en España: Protege tus Transacciones con Estos Consejos Prácticos
- 22 herramientas de seguridad de servidores Linux de código abierto en 2023
- 8 hábitos que deben tomar los teletrabajadores altamente seguros
- 7 cosas que incluso los nuevos usuarios de Linux pueden hacer para proteger mejor el sistema operativo
- Recuperar contraseñas de archivos comprimidos en 3 pasos
- Administración: Glances - herramienta de monitoreo y supervisión para Linux
- Cómo monitorear sistemas Linux remotos con Glances