- Communauté Orange
- ➔
- internet & fixe
- ➔
- Livebox
- ➔
- Script shell réactivation admin distante sur LB4 v...
Vous avez une question ?
Interrogez la communautéScript shell réactivation admin distante sur LB4 v4.65.0 suite reboot.
- S'abonner au fil RSS
- Marquer le sujet comme nouveau
- Marquer le sujet comme lu
- Placer ce Sujet en tête de liste pour l'utilisateur actuel
- Marquer
- S'abonner
- Page imprimable
- Marquer comme nouveau
- Marquer
- S'abonner
- S'abonner au fil RSS
- Imprimer
- Signaler
Script shell réactivation admin distante sur LB4 v4.65.0 suite reboot.
Bonjour,
J'ai dernièrement installé une LB4 (Sercomm) en v4.65.0 et découvert le bug dont elle souffre concernant la perte de l'admin distante suite à redémarrage (cf ce fils de discussion ).
Par chance, j'ai un Rapsberry pi à disposition sur son LAN accessible en ssh, j'ai donc toujours la possibilité de la reconfigurer si besoin avec un tunnel ("ssh -D port Raspberry" et le plugin Firefox FoxyProxy), mais c'est préférable d'automatiser la reconfiguration et de ne plus avoir à s'en soucier.
Voici le script shell que j'ai fait et qui s'en charge (nécessite curl et jq, à installer préalablement via "sudo apt install curl jq").
#!/usr/bin/env bash # Script de reconfiguration de l'admin distante sur LB4 v4.65.0 suite bug perte après reboot. # Décommenter pour debug # set -xv PROTO="http" # Réutilisable avec "-k https" pour d'autres buts en admin distante. URL="192.168.1.1" # Adresse IP LAN de la box, personnalisable si modifiée, ou nom dyndns pour utilisation en admin distante pour d'autres buts. PORT="80" # Port modifiable pour réutilisation du principe en admin distante. DELAIS="300" # Délais en secondes entre deux interrogations de la box. USERNAME="admin" PASSWORD="MonMotDePasseSecret" # À personnaliser.
# Paramètres de configuration de l'admin distante à personnaliser. AdminDistUserName="MonAdminDistant" AdminDistPassword="Sup3rSecret" # Doit semble-t-il contenir 8 caractères minimum dont un chiffre ou caractère spécial. AdminDistPort="12345" LB4Login () {
CONTEXTID=$(curl -m 3 -c .cookies-jar.txt -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah-Login' \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
--data-raw $'{"service":"sah.Device.Information","method":"createContext","parameters":{"applicationName":"webui","username":"'$USERNAME'","password":"'$PASSWORD'"}}' 2>/dev/null | \
jq -r '.data.contextID' 2>/dev/null)
SESSIONID=$(awk /$URL/'{print $NF}' .cookies-jar.txt)
COOKIEID=$(awk /$URL/'{print $6}' .cookies-jar.txt | cut -d "/" -f1)
! [[ -z $SESSIONID ]] && ! [[ -z $COOKIEID ]] && rm .cookies-jar.txt && return 0
[[ $CONTEXTID == "null" ]] && echo "Échec d'ouverture de session, vérifier les paramètres." && exit 1
} # Fonction d'ouverture de session sur la box, durée max session inactive env 10 min. GetLB4NumberOfReboots () {
CurrentLB4NumberOfReboots=$(curl -m3 -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah '$CONTEXTID \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: '$CONTEXTID \
-H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \
--data-raw '{"service":"DeviceInfo","method":"get","parameters":{}}' 2>/dev/null | \
jq '.status.NumberOfReboots' 2>/dev/null )
[[ $CurrentLB4NumberOfReboots == "null" ]] && LB4Login && GetLB4NumberOfReboots
[[ -z $CurrentLB4NumberOfReboots ]] && LB4Login && GetLB4NumberOfReboots
! [[ -z $CurrentLB4NumberOfReboots ]] && return 0
} # Donne le nombre total de reboot, réouvre une session si besoin. LB4DesactAdminDist () {
LB4DesactAdminDistSTATUS=$(curl -m3 -s $PROTO://$URL:$PORT/ws \
-X POST \
-H 'Authorization: X-Sah '$CONTEXTID \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: '$CONTEXTID \
-H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \
--data-raw '{"service":"NMC","method":"disableRemoteAccess","parameters":{}}' 2>/dev/null | \
jq '.status' 2>/dev/null )
} # Fonction de suppression de l'admin distante, répond "true". LB4ActivAdminDist () {
LB4ActivAdminDistSTATUS=$(curl -m3 -s $PROTO://$URL:$PORT/ws \
-X POST \
-H 'Authorization: X-Sah '$CONTEXTID \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: '$CONTEXTID \
-H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \
--data-raw '{"service":"NMC","method":"enableRemoteAccess","parameters":{"username":"'$AdminDistUserName'","password":"'$AdminDistPassword'","port":'$AdminDistPort',"timeout":0}}' 2>/dev/null | \
jq '.status' 2>/dev/null )
} # Fonction de création de l'admin distante, répond le n° de port si ok. BouclePrincipale () { while true do GetLB4NumberOfReboots
if [[ -f .LB4NumberOfReboots ]] # on vérifie si un fichier contenant le nombre de reboot existe déjà. then LB4NumberOfReboots=$(cat .LB4NumberOfReboots) # On y récupère la valeur précédemment connue. else echo $CurrentLB4NumberOfReboots > .LB4NumberOfReboots # Sinon on y met la valeur courante.
LB4NumberOfReboots=$CurrentLB4NumberOfReboots fi if [[ $CurrentLB4NumberOfReboots -gt $LB4NumberOfReboots ]] # Si la valeur courante est supérieure à la valeur connue, la box a rebooté, on réactive l'admin distante. then LB4DesactAdminDist LB4ActivAdminDist echo $CurrentLB4NumberOfReboots > .LB4NumberOfReboots # On sauvegarde la nouvelle valeur du compteur. sleep $DELAIS # On se met en sommeil. BouclePrincipale # On recommence.
else sleep $DELAIS BouclePrincipale fi
done }
if [[ $(ps aux | grep -v -E "pluma|gedit|nano" | grep -c $0 ) -gt 4 ]] # On vérifie si il y a déjà une instance du script active, on quitte si c'est le cas.
then
echo "Script $0 déjà en cours d’exécution !"
exit 1
fi
LB4Login BouclePrincipale
J'ai créé une tache cron qui le lance au démarrage du Raspberry (@reboot ~/LB4_Reset_Admin_Dist.sh).
[Edit]
Ça devrait fonctionner sous n'importe quel unix like, BSD, Linux, un NAS, un Mac, sous Windows avec WSL, etc.
Pensez à rendre exécutable le script avec "chmod +x ~/LB4_Reset_Admin_Dist.sh"
Au pire il faut juste attendre que quelqu'un sachant le faire s'en inspire et traduise en vbs, powershell, etc.
[/Edit]
[Edit2]
Simplifications.
[/Edit2]
[Edit3]
Ajout suite remarque @T800
[/Edit3]
Correctif implémenté dans la version G06.R01.C05_02 signalée ici.
Bonne journée.
Suggérer, expliquer, démontrer ne suffit parfois pas. On apprend de ses erreurs, enfin la plupart. "I'm All Out of Gum."
- Marquer comme nouveau
- Marquer
- S'abonner
- S'abonner au fil RSS
- Imprimer
- Signaler
Re: Script shell réactivation admin distante sur LB4 v4.65.0 suite reboot.
Merci, je vais regarder avec attention.
Je crois que quelques commentaires, dans le script, m'aideraient un peu.
- Marquer comme nouveau
- Marquer
- S'abonner
- S'abonner au fil RSS
- Imprimer
- Signaler
Re: Script shell réactivation admin distante sur LB4 v4.65.0 suite reboot.
Salut @Samu
Commentaires ajoutés.
Suggérer, expliquer, démontrer ne suffit parfois pas. On apprend de ses erreurs, enfin la plupart. "I'm All Out of Gum."
- Marquer comme nouveau
- Marquer
- S'abonner
- S'abonner au fil RSS
- Imprimer
- Signaler
Re: Script shell réactivation admin distante sur LB4 v4.65.0 suite reboot.
J'espère que cela suffira.
Mes développements sous Linux remontant à plus de 10 ans, j'espère m'y retrouver.
Certainement, à bientôt, avec des questions.
- Marquer comme nouveau
- Marquer
- S'abonner
- S'abonner au fil RSS
- Imprimer
- Signaler
Re: Script shell réactivation admin distante sur LB4 v4.65.0 suite reboot.
Json et moi, il faut déjà qu'on deviennent copains. Ce n'est pas gagné !
- Marquer comme nouveau
- Marquer
- S'abonner
- S'abonner au fil RSS
- Imprimer
- Signaler
Re: Script shell réactivation admin distante sur LB4 v4.65.0 suite reboot.
Bonjour @matrixbx
Merci pour le script! J'ai une petite question : je vois que la fonction LB4Login n'est pas appelée avant le premier curl de GetLB4NumberOfReboots... Il ne manque pas qqch pour initialiser les variables CONTEXTID et COOKIEID ?
Bonne journée
- Marquer comme nouveau
- Marquer
- S'abonner
- S'abonner au fil RSS
- Imprimer
- Signaler
Re: Script shell réactivation admin distante sur LB4 v4.65.0 suite reboot.
Bonjour @T800
tout à fait, lors de la 1ère exécution ces variables ne sont pas définies et on a la réponse "null" et du coup on lance LB4Login puis de nouveau GetLB4NumberOfReboots.
En cas de reboot de la box, la session précédente est de toute façon invalide de son point de vue et la valeur de CONTEXTID sera rejeté par la box et on aura "null" quand même.
Si vous préférez éviter cette étape, vous pouvez appeler LB4Login juste avant BouclePrincipale
Suggérer, expliquer, démontrer ne suffit parfois pas. On apprend de ses erreurs, enfin la plupart. "I'm All Out of Gum."