Apagar una nas de Synology desde una Qnap cuando se activa nuestro SAI
#1
Brick 
Hola

El otro día en un grupo de Telegram plantearon el caso de querer apagar dos nas de marcas distintas teniendo un único SAI conectado a una de ellas.

Pues bien, vamos a tratar de describir como hacerlo.
El escenario sería, tenemos el SAI conectado por usb a la QNAP y tenemos una Synology con DSM7 en la misma red.

El apagado o la auto-protección de la Qnap lo haríamos desde la propia gestión de QTS en el apartado de UPS

Los pasos básicos para apagar la Synology son:
  1. habilito ssh en la Synology para poder acceder desde la QNAP y poder usar la consola
  2. habilito en DSM 7 el que el usuario admin pueda lanzar la orden de apagado o reboot
  3. genero claves en la QNAP para poder acceder a la Synology sin que pida la clave
  4. creo un script para que cuando el SAI está suministrando energía usando baterías lanza un comando de apagado de la Synology.
  5. agrego la ejecución cíclica en el crontab del script anterior.

1-habilito ssh en la Synology para poder acceder desde la QNAP y poder usar la consola

Vamos al panel de control de DSL. 
Desde ahí en la sección de conectividad, habilito ssh y pongo un puerto.
El habitual es 22, pero podemos usar otro libre

   


2- habilito en DSM 7 el que el usuario admin pueda lanzar la orden de apagado o reboot

Para nuestra suerte  Dodgy desde DSM7 se ha aumentado la seguridad y hay ciertos comando que NO podemos ejecutarlos aun siendo administradores.
Para poder hacerlo hemos de hacer ciertas operaciones en la consola como root.
Lanzamos la consola ssh de la synology (por ejemplo con putty)
Una vez estamos en la consola como un usuario administrador ejecutamos el siguiente comando:
Código:
sudo -i
Nos pedirá de nuevo la clave, que es la misma que la del usuario administrador con la que nos hemos identificado en putty.
Veremos que el prompt de la consola ha cambiado de admin a root
   

Ahora nos situamos en la carpeta /etc/sudoers.d con el comando
Código:
cd /etc/sudoers.d

y creamos un archivo llamado shutdown
Código:
touch shutdown

Ahora editamos el archivo con "vi" 
Código:
vi shutdown

   

y añadimos el siguiente contenido pulsando previamente la tecla "insert"
Código:
admin ALL=(ALL) NOPASSWD: /sbin/poweroff, /sbin/reboot, /sbin/shutdown
Ahora para salir y guardar desde vi hay que pulsar los siguiente:  
una vez la tecla ESC y escribimos :wq!  , pulsamos la tecla Intro y el archivo será guardado

   

una vez ya de vuelta a la consola, seguimos como root, salimos a la consola de administrador escribiendo 
Código:
exit

Ahora ya podemos probar si funciona esos tres comandos sin tener que poner la clave del root.
Para ello vamos a provocar un reinicio de la máquina escribiendo
Código:
sudo reboot

Veremos que la Synology se reinicia.

Ahora vamos al siguiente punto tras la reinicio anterior.

3-genero claves en la QNAP para poder acceder a la Synology sin que pida la clave

En este punto lo que vamos a hacer es generar en la Qnap unos archivos ssh de clave privada y pública que nos permitan acceder y ejecutar comandos ssh sin introducir la clave.

Abrimos una consola ssh desde el usuario admin de la QNAP y escribimos lo siguiente:
Código:
ssh-keygen -b 4096 -t rsa
seguimos el asistente y pulsamos intro para no introducir clave alguna. Una vez acabe el asistente, nos habrá creados dos archivos en la carpeta ~/.ssh/

Ejecuto el siguiente comando para insertar la clave publica en la nas de Synology (adaptar el comando para usar la ip de la Synology y el puerto ssh (22) que activamos en el punto 1
Código:
cat ~/.ssh/id_rsa.pub | ssh admin@ip_local_nas_synology - p22 'cat >> ~/.ssh/authorized_keys'
el símbolo "~" sale pulsando la tecla ALT y luego 126 en el bloque numérico. También podemos substituirlo por "/root"

Ahora para comprobar que accedemos sin petición de clave ejecutamos desde la Qnap lo siguiente:
Código:
ssh admin@ip_nas_synology -p22 'ls'
Y si todo ha ido bien, nos presenta un listado del contenido de la carpeta "/var/services/homes/admin"  de la Synology sin pedir contraseña.

4-creo un script para que cuando el SAI está suministrando energía usando baterías lanza un comando de apagado de la Synology.

El script es muy sencillo y lo creamos en una carpeta que esté dentro de /share/ para que no sea eliminado tras los reinicios de la Qnap.
Yo suelo recomendar hacerlo en una carpeta compartida ya que así podemos editarlo facilmente desde nuestro PC.

Para hacerlo mas sencillo voy a uso WinSCP que me permite moverme gráficamente por el árbol de carpetas de la nas y en una carpeta compartida /share/Public de la Qnap creo el archivo "sai.sh"

el contenido será el siguiente:
Código:
#! /bin/bash
ups=$(upsc qnapups | grep ups.status:)
estado=${ups:12:2}
echo "$ups  $estado"
  if [ "$estado" = "OL" ]; then
        echo "EL SAI está con energia electrica en la NAS"
  elif [ "$estado" = "OB" ]; then
        echo "El SAI está suministrando energía desde las baterías"
        # lanzo ordenes de apagado a otros equipos
        ssh admin@ip_local_synology -p 22 'sudo poweroff'
  else
        echo "No contacto con el SAI"
  fi

La línea "ssh admin@ip_local_synology -p 22 'sudo poweroff'" la adapto a la ip de nuestra synology y al puerto ssh que definimos en el punto anterior.
Recordad que ya hicimos una prueba de reinicio en un punto anterior.

El script ha de tener atributos de ejecución, para ello por consola ejecuto
Código:
chmod +x /share/Public/sai.sh
o bien desde WinSCP actualizo los atributos X

para probar si funciona, desde la consola ejecutamos
Código:
/share/Public/sai.sh

   

Y si todo ha ido bien, veremos que el SAI está con energía eléctrica.

Si desconectamos el SAI su alimentación y ejecutamos de nuevo el script, veremos que nos muestra un mensaje de que "El SAI está suministrando energía desde las baterías" y que lanza el apagado remoto de la Synology ( y no lo podemos parar )


5-agrego la ejecución cíclica en el crontab del script anterior.

Ahora sólo hemos de agregar en el crontab de la Qnap una ejecución del script anterior en la ruta /share/sai.sh 
Lo haremos cada minuto de forma repetitiva

desde consola ejecutamos los tres comandos siguientes:
Código:
echo -e "*/1 * * * * /bin/sh /share/Public/sai.sh">> /mnt/HDA_ROOT/.config/crontab
crontab  /etc/config/crontab
/etc/init.d/crond.sh restart
Si lo queremos cada 2 minutos, sólo deberíamos cambiar el */1 por */2



Y con todo esto ya tenemos listo todo y nuestra Synology debería recibir orden de apagarse cuando nuestra Qnap detecta que el SAI está sin alimentación a 220V.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder




Usuarios navegando en este tema: 1 invitado(s)