#1 Le 18/07/2011, à 18:48
- PieroAgud
[RESOLU] Script bash : test si connexion en ssh établie et extinction
Bonjour à tous!
N'ayant pas trouvé la solution à mon problème, je viens vous en faire part.
Je souhaite réaliser un script bash afin d'éteindre un serveur lorsque personne n'est connecté en ssh dessus (ledit serveur va dans un 1er temps simplement me servir à m'amuser un peu et donc je ne souhaite pas qu'il reste allumé 24/24).
C'est un script à exécuter régulièrement (crontab) dont voici le code :
#!/bin/bash
# On test si quelqu'un est connecté via ssh (les ports 9922 et 443 sont ceux qui seront utilisés suivant les cas).
if [ netstat -ntaup | egrep '^.*:9922.*ESTABLISHED.*sshd.*$' ] || [ netstat -ntaup | egrep '^.*:443.*ESTABLISHED.*sshd.*$' ]
then
# Si le fichier flag a été crée mais que qqn se connecte ensuite, on le supprime. Sinon on quitte simplement le script.
echo "connexion active"
if [ -e flag ]
then rm -f flag && exit 0
else exit 0
fi
# Si personne de connecté la 1ere fois depuis 20 min, on touch un fichier flag. Si toujours personne de connecté alors que flag existe, on éteint.
else
if [ -e flag ]
then rm -f flag && echo "on éteint" #&& shutdown -h now
else touch flag
fi
fi
exit 0
J'ai commenté la commande shutdown car je test ce script sur mon laptop et j'ai pas envie de redémarrer toutes les 5 min...
Voilà ce qu'il renvoie en console :
Connexion ssh non active :
:~$ ./serverhalt.sh
./serverhalt.sh: ligne 4 : [: « ] » manquant
egrep: ]: Aucun fichier ou dossier de ce type
./serverhalt.sh: ligne 4 : [: « ] » manquant
egrep: ]: Aucun fichier ou dossier de ce type
Malgré les messages d'erreur, le fichier flag est bien crée et si j'exécute une seconde fois, j'ai bien le message "on éteint" qui s'affiche.
Avec un tunnel ouvert sur localhost (ssh localhost -p 9922 -L 1234:localhost:3214) (le port 9922 est le port d'écoute de mon serveur ssh) :
:~$ ./serverhalt.sh
./serverhalt.sh: ligne 4 : [: « ] » manquant
egrep: ]: Aucun fichier ou dossier de ce type
./serverhalt.sh: ligne 4 : [: « ] » manquant
egrep: ]: Aucun fichier ou dossier de ce type
Toujours les messages d'erreur. Là le problème, c'est que le fichier flag est aussi crée (et idem, extinction si je relance le script).
Visiblement, c'est le test if avec netstat qui est mal écrit... j'ai tenté ça sur le conseil d'un ami mais ça n'a pas l'air de fonctionner...
Si quelqu'un pouvait m'indiquer comment écrire le test suivant : if "quelqu'un est connecté en ssh sur la machine et/ou sftp et/ou un tunnel est ouvert" (je pense que c'est la même condition?)
De plus, j'ai mis des "exit 0" pour sortir du script (restes des 3 ou 4 cours de C de mon école d'ingé...) mais je ne sais pas si c'est la bonne méthode. Quelqu'un peut-il m'éclaire sur ce point?
Merci d'avance
Dernière modification par PieroAgud (Le 20/07/2011, à 16:40)
Hors ligne
#2 Le 19/07/2011, à 08:49
- binouche22
Re : [RESOLU] Script bash : test si connexion en ssh établie et extinction
Bonjour,
il manque des '`' a la ligne 4:
if [ `netstat -ntaup | egrep '^.*:9922.*ESTABLISHED.*sshd.*$'` ] || [ `netstat -ntaup | egrep '^.*:443.*ESTABLISHED.*sshd.*$'` ]
Pourquoi ne pas simplement utiliser la commande who pour voir la liste des utilisateurs connectés?
Dernière modification par binouche22 (Le 19/07/2011, à 08:53)
binouche22
Hors ligne
#3 Le 19/07/2011, à 10:30
- PieroAgud
Re : [RESOLU] Script bash : test si connexion en ssh établie et extinction
Rhooo j'ai honte
Merci pour ta réponse, je teste ça en rentrant ce soir.
Pourquoi ne pas simplement utiliser la commande who pour voir la liste des utilisateurs connectés?
Heu...excellente question ^^
Je suis un grand débutant en bash et je n'y avais pas pensé...
En fait j'ai rédigé ce script après une conversation avec un ami qui en utilisait un pour son serveur, sauf qu'il testait plusieurs services comme ça (ssh, ftp, samba, http...). Du coup c'était peut-être plus simple.
Ensuite, à terme, je compte crée des comptes user avec des chroot pour ma famille afin de faire un peu de SFTP...du coup tester si une connexion ssh est ouverte est peut-être plus simple que de faire un test sur tous les users? Mais peut-être me trompe-je. En tout cas si tu peux m'en dire plus sur la manière dont tu vois les choses, ça m'intéresse!
Hors ligne
#4 Le 19/07/2011, à 13:24
- Watael
Re : [RESOLU] Script bash : test si connexion en ssh établie et extinction
salut
les crochets ne sont pas nécessaires, et un seul grep suffit
if netstat -ntaup | egrep -q '(9922|443).*ESTABLISHED.*sshd'; then...fi
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 19/07/2011, à 13:51
- PieroAgud
Re : [RESOLU] Script bash : test si connexion en ssh établie et extinction
Le ; c'est pour compenser l'absence de crochets?
Le début de l'expression (avant le port, ^.*:) n'est pas nécessaire?
Lorsqu'on ne met pas de crochets, on peut se passer de back quotes?
Hors ligne
#6 Le 19/07/2011, à 15:15
- Watael
Re : [RESOLU] Script bash : test si connexion en ssh établie et extinction
Le ; c'est pour compenser l'absence de crochets?
non, c'est parce que j'ai tout écrit sur une ligne.
Le début de l'expression (avant le port, ^.*:) n'est pas nécessaire?
'^.*' siginifie "commence par n'importe quel caractère", c'est implicite.
Par contre les deux points peuvent être utiles, donc, en effet, plutôt
grep ':(9922|443).*ESTABLISHED.*sshd'
Lorsqu'on ne met pas de crochets, on peut se passer de back quotes?
oui, il faut ne pas utiliser la substitution de commande.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 20/07/2011, à 07:15
- PieroAgud
Re : [RESOLU] Script bash : test si connexion en ssh établie et extinction
Merci Watael
EDIT : J'ai enfin pu tester, et ça fonctionne nickel!
Merci à tous les deux pour vos réponses!
Dernière modification par PieroAgud (Le 20/07/2011, à 16:39)
Hors ligne
#8 Le 25/07/2011, à 07:32
- sputnick
Re : [RESOLU] Script bash : test si connexion en ssh établie et extinction
Solution plus simple et très concise ^^
[[ $SSH_CONNECTION ]] || halt
Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. Confucius
https://sputnick.fr
Hors ligne
#9 Le 25/07/2011, à 08:57
- Watael
Re : [RESOLU] Script bash : test si connexion en ssh établie et extinction
salut,
simple et concis pour savoir si tu es connecté en ssh, mais ça ne dira pas si d'autres utilisateurs le sont.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne