Affiche "plop" dans un shell :
if [[ "1" == "1" ]]; then echo "plop";else echo "not good"; fi
Affiche "not good" dans le conky :
${execp if [[ "1" == "1" ]]; then echo "plop";else echo "not good"; fi }
Pourquoi ?
Comment effectuer une comparaison de deux strings avec bash dans le conky ?
Le but est de faire tourner cette comparaison de deux signatures TLS dans le conky :
${alignc}${font :size=7}${execp certSecure=$( openssl s_client -connect 88.191.250.176:443 -servername linuxfr.org < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin ); certTor=$( torsocks openssl s_client -connect linuxfr.org:443 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin ); if [[ "$certSecure" == "$certTor" ]]; then echo '${color green}';echo "$certTor";echo '${color}';else echo '${color red}';echo "$certSecure"; echo "$certTor";echo '${color}';fi }${font}
# bash vs. sh ?
Posté par Cyril Brulebois (site web personnel) . Évalué à 1.
Il se passe quoi si tu changes
==
en=
? Le premier n'est pas standard, le second si. Si ton shell système n'est pas bash mais par exemple dash, ça peut expliquer que le test renvoie une erreur…Debian Consultant @ DEBAMAX
[^] # Re: bash vs. sh ?
Posté par voxdemonix . Évalué à 1.
===> Affiche not good.
En suivant les moteurs de recherches j'ai aussi testé avec if_match comme expliqué ici : https://stackoverflow.com/questions/15692990/conky-with-if-match-and-and
Mais cela ne fonctionne pas (le conky ne s'affiche même plus).
[^] # Re: bash vs. sh ?
Posté par Cyril Brulebois (site web personnel) . Évalué à 1.
Et c'est encore mieux après un café… C'est la même chose avec
[[ … ]]
:Debian Consultant @ DEBAMAX
[^] # Re: bash vs. sh ?
Posté par voxdemonix . Évalué à 1.
bash -c aussi ne semble pas trop aimer cette condition non plus.
Pourtant si le else fonctionne, en toute logique, c'est que le if ne provoque pas d'erreur (si non le conky devrait crasher (et ne plus s'afficher) ou afficher des brides de retours d'erreurs)
[^] # Re: bash vs. sh ?
Posté par Cyril Brulebois (site web personnel) . Évalué à 2.
Si tu veux imbriquer des guillemets, il faut protéger ceux qui sont à l'intérieur. Ou plus simplement, utiliser des apostrophes autour…
Debian Consultant @ DEBAMAX
[^] # Re: bash vs. sh ?
Posté par voxdemonix . Évalué à 1.
Avec ou sans les [[ … ]] le conky réagit pareil (par contre dans le shell sans les ça plante).
[^] # Re: bash vs. sh ?
Posté par voxdemonix . Évalué à 1. Dernière modification le 26 août 2019 à 16:36.
Une petite faute s'est glissé dans la précédente commande.
Donc la condition semble fonctionner avec le code suivant, mais les variables $certTor et $certSecure ne veulent plus s'afficher.
[^] # Re: timeout openssl
Posté par voxdemonix . Évalué à 1. Dernière modification le 26 août 2019 à 16:51.
J'en profite du thread ouvert : si quelqu'un sait comment rajouter un timeout sur la commande openssl se serait cool :) (j'ai déjà tenté en utilisant la commande timeout [temps] [commandes] mais elle ne semblait pas avoir d'effet se qui freeze la commande pendant un certains temps quand les hosts ne répondent pas).
Man openssl ne semble pas indiquer de paramètre de timeout.
[^] # Re: timeout openssl
Posté par Cyril Brulebois (site web personnel) . Évalué à 3.
Cf. les options
-s
et-k
? Le signal par défaut peut avoir été ignoré, du coup c'est comme sitimeout
n'avait rien fait ?Debian Consultant @ DEBAMAX
[^] # Re: timeout openssl
Posté par voxdemonix . Évalué à 1. Dernière modification le 26 août 2019 à 19:26.
Quand j'ajoute la commande devant openssl le shell répond
Pour la commande :
PS : merci pour tes réponses;)
[^] # Re: timeout openssl
Posté par Cyril Brulebois (site web personnel) . Évalué à 2.
Parce que
DURATION
n'est pas facultatif quand tu appellestimeout
:Si tu enlèves les redirections, tu verras l'erreur :
… ce qui explique que la commande de l'autre côté du pipe se plaigne. Au passage, tu pourrais t'épargner
-in /dev/stdin
.Debian Consultant @ DEBAMAX
[^] # Re: timeout openssl
Posté par voxdemonix . Évalué à 1.
Merci, la commande suivante à l'air de bien tourner.
Soit elle ne renvoie rien au bout de 5s, soit elle renvoie la signature du certif.
[^] # Re: bash vs. sh ?
Posté par Cyril Brulebois (site web personnel) . Évalué à 3.
Au hasard, les variables disparaissent dès qu'on sort du bloc
${execp …}
? Du coup ton test « fonctionne » parce que tu compares deux chaînes vides, mais il n'y a rien à afficher ?Debian Consultant @ DEBAMAX
[^] # Re: bash vs. sh ?
Posté par voxdemonix . Évalué à 1. Dernière modification le 26 août 2019 à 17:15.
Je pense que tu as raison, quand les deux certificats sont différents la comparaison renvoie quand même true.
Bref, cette méthode ne fonctionne pas, il faut continuer sur une oneline en bash.
# Solution temporaire
Posté par voxdemonix . Évalué à 1.
En attendant d'arriver à faire fonctionner les if dans les conky, la méthode de contournement utilisée est de passer par grep et sed. C'est dégueulasse, on consomme inutilement des ressources en sur-traitant les strings, mais à la guerre comme à la guerre.
La version finale se trouvera ici : https://linuxfr.org/wiki/debian-ubuntu-health-check-de-services-grace-aux-conkys#toc-checker-le-certificat-tls-https
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.