Seguridad Wireless - Wifi

Equipos y materiales => Puntos de acceso, routers, switchs y bridges => Openwrt & LEDE => Mensaje iniciado por: peperfus en 21-03-2019, 11:49 (Jueves)

Título: Script en /etc/rc.local no va. Manualmente sí.
Publicado por: peperfus en 21-03-2019, 11:49 (Jueves)
Hola

Quiero que se ejecute un script cada vez que enciende el router y por eso lo puse en el archivo /etc/rc.local
Sin embargo, al reiniciar el router, el script no funciona.

Los permisos de ejecución son correctos.
Todas las rutas especificadas en el script son absolutas.

El script lo que hace es activar la wifi de otro router, mediante la orden:
ssh otrorouter wifi up ..... (o algo similar, ahora no recuerdo la sintaxis exacta)

El caso es que si lo ejecuto manualmente desde consola, funciona perfecto. Sólo falla si lo pongo en el rc.local.
¿Alguna idea de qué puede estar pasando?
Gracias.

Edito: por lo visto, el script sí que se ejecuta desde rc.local. Lo que está fallando es la orden ssh otrorouter....
Este es el contenido del script.
Código: [Seleccionar]
#!/bin/sh

echo ENCENDIENDO TODAS LAS WIFIS DE CASA

rm /root/WIFI_OFF
touch /root/WIFI_ON

for router in bosque.lan salon.lan oficina.lan
do
  ssh $router "wifi up"
done

El router que ejecuta tiene "permiso" (autenticación por clave pública y privada) de login directo a los otros routers, sin necesidad de password.
Y en su archivo hosts están las IPs correspondientes de los otros routers también.
Se me ocurre que mientras se está ejecutando el script, aún no haya arrancado la red, o algo así ????
Pero tampoco, porque le he puesto un sleep de bastante tiempo para que se espere antes de ejecutar el bucle y tampoco va.
Título: Re:Script en /etc/rc.local no va. Manualmente sí.
Publicado por: crash en 21-03-2019, 15:18 (Jueves)
¿has probado a ponerle ; al bucle for?
Código: [Seleccionar]
for router in bosque.lan salon.lan oficina.lan ;do
  ssh $router "wifi up"
done
y otra cosa lo de
Código: [Seleccionar]
"wifi up" ¿es algún tipo de archivo o es un mensaje?
Título: Re:Script en /etc/rc.local no va. Manualmente sí.
Publicado por: Tki2000 en 21-03-2019, 16:33 (Jueves)
Prueba a guardarlo en un archivo aparte, y luego desde rc.local lo llamas con el ampersand al final:

Código: [Seleccionar]
script.sh &
Título: Re:Script en /etc/rc.local no va. Manualmente sí.
Publicado por: peperfus en 21-03-2019, 23:13 (Jueves)
Gracias por las respuestas.

El rc.local sí que ejecuta el script, aún sin el &.
Lo que está fallando es la parte del bucle for. No lo hace.
¿Hay alguna manera de que guarde un log de error o algo así?

He probado a poner directamente las ips de los routers, por si al dns se le pegan las sábanas al arrancar el router, pero tampoco.
Esto es lo que está fallando:
Código: [Seleccionar]
for router in 249 251 252
do
  ssh 192.168.0.$router "wifi up"
done

(También he probado a ejecutarlo como dices, Tki2000, con el & al final en el rc.local y no ha cambiado nada)

Qué misterio. Manualmente funciona perfecto: entra en cada router y activa su wifi. Pero al ejecutarlo desde rc.local, nada: las wifis siguen desactivadas.
Me intriga saber el motivo.
Título: Re:Script en /etc/rc.local no va. Manualmente sí.
Publicado por: peperfus en 21-03-2019, 23:22 (Jueves)
Eureka !

Creo que ya sé lo que está pasando.
Gracias a este truquito, explicado en esta página:
https://stackoverflow.com/questions/7783341/run-script-with-rc-local-script-works-but-not-at-boot
Que explica cómo guardar un log de errores del rc.local...., haciéndolo de esta manera:
Código: [Seleccionar]
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exec 2> /tmp/rc.local.log  # send stderr from rc.local to a log file
exec 1>&2                      # send stdout to the same log file
set -x                         # tell sh to display commands before execution

/opt/stuff/somefancy.error.script.sh

exit 0

He visto que el archivo log tiene esto:
Código: [Seleccionar]
echo ENCENDIENDO TODAS LAS WIFIS DE CASA
ENCENDIENDO TODAS LAS WIFIS DE CASA

rm /root/WIFI_OFF
rm: can't remove '/root/WIFI_OFF': No such file or directory
touch /root/WIFI_ON

#for router in bosque.lan salon.lan oficina.lan
for router in 249 251 252
do
  ssh 192.168.0.$router "wifi up"
done

Host '192.168.0.249' is not in the trusted hosts file.
(ssh-rsa fingerprint sha1!! ....................)
Do you want to continue connecting? (y/n)
ssh: Connection to root@192.168.0.249:22 exited: Didn't validate host key

Host '192.168.0.251' is not in the trusted hosts file.
(ssh-rsa fingerprint sha1!! .................)
Do you want to continue connecting? (y/n)
ssh: Connection to root@192.168.0.251:22 exited: Didn't validate host key

Host '192.168.0.252' is not in the trusted hosts file.
(ssh-rsa fingerprint sha1!! ..................)
Do you want to continue connecting? (y/n)
ssh: Connection to root@192.168.0.252:22 exited: Didn't validate host key

Así que supongo que el usuario que ejecuta el script no tiene los routes en su "known_hosts". Ahora a mirar cómo los añado.
Título: Re:Script en /etc/rc.local no va. Manualmente sí.
Publicado por: Tki2000 en 21-03-2019, 23:37 (Jueves)
Por aquí he pillado esto: https://forum.dd-wrt.com/phpBB2/viewtopic.php?p=537122 (https://forum.dd-wrt.com/phpBB2/viewtopic.php?p=537122)
Es para dd-wrt, pero ha encontrado una solución. Mira a ver si te funciona.
Título: Re:Script en /etc/rc.local no va. Manualmente sí.
Publicado por: peperfus en 21-03-2019, 23:45 (Jueves)
De momento estoy probando el parámetro -y del ssh, que fuerza la conexión aún con hosts desconocidos.
Lo que no entiendo es por qué el rc.local no mira en el archivo known_hosts.  ???
informo en 0,

ups, no había leído tu último post. Ahora le echaré un vistazo....
De momento parece ser que también me falla la resolución dns, así que vuelvo a poner las IPs de los routers.....

Vuelvo luego con resultados.
Título: Re:Script en /etc/rc.local no va. Manualmente sí.
Publicado por: Tki2000 en 21-03-2019, 23:48 (Jueves)
Mira esto también, por si hay problemas con lo anterior. Básicamente es lo mismo, pero forzando la variable HOME

https://www.linksysinfo.org/index.php?threads/scp-wont-run-in-startup-script.68197/ (https://www.linksysinfo.org/index.php?threads/scp-wont-run-in-startup-script.68197/)

Por lo que he visto por ahí, la opción -y de ssh tenía un bug, y no funcionaba. Desconozco si se ha arreglado.

Más de lo mismo: https://superuser.com/questions/946929/dropbear-dbclient-scp-equivalent-to-openssh-ostricthostkeychecking (https://superuser.com/questions/946929/dropbear-dbclient-scp-equivalent-to-openssh-ostricthostkeychecking)
Título: Re:Script en /etc/rc.local no va. Manualmente sí.
Publicado por: peperfus en 22-03-2019, 00:08 (Viernes)
Con la opción -y rula.

Y con la opción de la variable HOME .... RULA  ;D

Gracias Tki2000, eres mi héroe  ;D

 La clave ha sido añadir al principio de rc.local:

export HOME=/root

(También habia probado sin el export, pero no funcionaba)