Monitorizar temperaturas con Telegram
Last updated
Last updated
Con este sencillo script, no necesitamos tener firmware Merlin en el Asus, basta con habilitar el acceso SSH (recomiendo cambiar el puerto, por defecto es el 22), y un equipo con Linux 🐧 que tengamos 24/7, basta con una raspberryPi 🍓 o similar, en mi caso uso una NanoPi Neo3 🐍 que tengo como servidor docker/rsyslog
El resultado seria como este, un mensaje cada 2h, lo podemos cambiar, ya que pondremos en un cron.
Lo primero, habilitar el acceso SSH en el router, para ello entramos en nuestro router via web
Entramos en Administration / System, y nos vamos al final de la pagina, en Service, aqui habilitamos el SSH, LAN Only, (ya que accederemos desde local, si vas hacerlo desde fuera, mejor por VPN), definimos un puerto, y copiamos nuestra clave ssh del servidor que vamos a usar, y guardamos los cambios.
Ahora creamos un fichero de nombre telegram.env
, y lo guardaremos donde queramos, este fichero contiene el token y chatID de nuestro Telegram, si no sabes cuales son tu token y chatID, los puedes obtener de estas cuentas de telegram:
El script, debes cambiar unos parámetros para adaptarlo a nuestra configuración
Y guardamos el script donde queramos.
Configuramos el cron para que lo ejecute cuando deseemos, en mi caso cada 2h.
Para no saturar de accesos SSH, vamos a reutilizar o multiplexar la conexión SSH, para ello en el servidor que vamos a usar
Y creamos un fichero en ~/.ssh/config
ControlMaster auto
: permite reutilizar una conexión SSH por múltiples sesiones. Por defecto está seteado a no
. El parámetro auto
permite al cliente SSH utilizar una conexión existente, y si no existe, crear una nueva (el caso de la primer sesión contra un servidor).
Esta opción requiere de otra opción: ControlPath
, para funcionar.
ControlPath <ruta>
: esta opción permite especificar la ruta, dentro del sistema de archivos, al socket Unix que se utilizará para compartir la conexión entre varias sesiones.
En mi caso, el archivo será ~/.ssh/sockets/%r@%h:%p
(más adelante explico estos comodines/wildcards).
ControlPersist 600s
: esta opción debe ser usada junto con ControlMaster, y permite especificar el tiempo que la conexión principal permanecerá activa en segundo plano una vez que todas las sesiones contra un determinado servidor se hayan cerrado. Si la conexión está activa, cualquier nueva sesión la utilizará. Una vez que haya expirado el tiempo, la conexión se cerrará, se eliminará el archivo de socket Unix, y la siguiente sesión creará una nueva conexión.
Aquí he especificado 600 segundos, pero otras opciones válidas son no
(para que se cierre la conexión al cerrar la última sesión) o yes
(para mantener permanentemente la conexión abierta).
Los comodines o tokens válidos para el nombre de archivo son los siguientes (extraídos directamente desde man ssh_config
):
%%
Un caracter ‘%’
%C
Equivalente a %l%h%p%r
%d
Directorio local del usuario.
%f
El fingerprint de la clave del servidor
%H
El nombre o dirección del host al que se conecta, extraído de known_hosts
.
%h
El hostname del servidor remoto
%i
El UID del usuario local
%K
La clave del host codificada usando Base64
%k
Si está especificado, el alias de la clave del host, de lo contrario, el nombre de host remoto especificado en la línea de comando de conexión
%L
El hostname del equipo local
%l
El hostname del equipo local, incluyendo el dominio completo
%n
El hostname remoto original pasado por argumento en la línea de comando de conexión
%p
El puerto de la conexión remota
%r
El nombre de usuario remoto
%T
La interfaz local de tipo tun o tap asignada para el túnel SSH en el caso de que se haya solicitado reenvío de túnel. En caso contrario será NONE
.
%t
El tipo de clave utilizada para el servidor remoto, por ejemplo, ssh-ed25519.
%u
El nombre de usuario local
En nuestro caso, el archivo especificado es: %r@%h:%p
, o sea, usuarioRemoto@hostRemoto:puerto
, lo que nos va a permitir identificar perfectamente qué archivo de socket corresponde con cada conexión remota.
Y ya lo tendríamos.