bash : script de vérification sur serveur

bash : script de vérification sur serveur - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 12-03-2015 à 14:26:11    

Bonjour,
 
Je cherche à mettre au point un petit script bash pour effectuer les actions suivantes :
 
* lire un fichier de paramétrage qui contient une liste de serveur/adresses ip.
* connexion sur chacun de ces serveurs/adresses ip.
* check d'un certain nombre de paramètres : version précise de l'os du serveur, vérification du fichier /etc/resolv.conf
 
J'ai commencé avec les lignes suivantes :
 

#!/bin/bash
# Script de controle de serveur
 
# Declaration variable liste contenant la liste des serveurs
liste=/tmp/liste_serveurs.txt
 
# Boucle de lecture du fichier et affichage /etc/redhat-release des serveurs
while read line
do
        ssh root@"$line" cat /etc/redhat-release
done < $liste

 
Je précise que je suis autorisé à me connecter en tant que user root sur les serveurs que je souhaite checker ;)
 
Problème : le script lit juste la première ligne du fichier, m'affiche le contenu de /etc/redhat-release & sort du script :(
J'ai essayé de rajouter un sleep dans ma boucle mais ça ne change rien.
 
Bref, je suis coincé :(

Reply

Marsh Posté le 12-03-2015 à 14:26:11   

Reply

Marsh Posté le 12-03-2015 à 15:04:39    

si ce n'est pas pour "l'exercice de le concevoir" tu devrais TRES VIVEMENT t'intéresser à des outils de config management comme puppet et chef, voire ansible et salt. tu peux aussi utiliser fabric pour ça


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 12-03-2015 à 15:19:52    

C'est exactement ça, je cherche à le faire pour le fun, ce qui me permet également de bidouiller en bash :)


---------------
Mon Feed
Reply

Marsh Posté le 12-03-2015 à 15:35:32    

Hello,
 
As tu vérifié le format de fichier tu lui passes, je suppose que le while read line s'appuie sur le saut de ligne Unix ?!
 
je viens de tester sur une machine et ça crache bien ligne par ligne le truc :
 

Code :
  1. #!/bin/bash
  2. FILE=/etc/passwd
  3. while read line ; do
  4.         echo $line
  5. done < $FILE


 

Code :
  1. root@CDLVW030:/root # ./test.sh
  2. 100:x:100:101:User for D-BUS:/var/run/dbus:/bin/false
  3. 101:x:101:102:User for haldaemon:/var/run/hal:/bin/false
  4. at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
  5. bin:x:1:1:bin:/bin:/bin/bash
  6. daemon:x:2:2:Daemon:/sbin:/bin/bash
  7. ftp:x:40:49:FTP account:/srv/ftp:/bin/bash
  8. games:x:12:100:Games account:/var/games:/bin/bash
  9. [...]

Reply

Marsh Posté le 12-03-2015 à 15:47:54    

J'ai oublié de préciser, mais effectivement le fait de faire un echo dans ma boucle while affiche bien l'intégralité du fichier en entrée.


---------------
Mon Feed
Reply

Marsh Posté le 12-03-2015 à 16:28:28    

Effectivement je viens d'essayer avec un ssh $liste 'uname -a' en boucle et seul le premier passe.
 
il te faut ajouter l'option -n à ssh pour que cela fonctionne :

Code :
  1. ssh -n root@"$line" cat /etc/redhat-release


 
 
J'ai trouvé la solution ici :
 
http://www.linuxquestions.org/ques [...] dy-798036/
 
autre solution :
 

Code :
  1. ssh root@"$line" cat /etc/redhat-release < /dev/null


Message édité par ahbahlut le 12-03-2015 à 16:31:52
Reply

Marsh Posté le 12-03-2015 à 16:47:22    

Ah bah oui, c'était tout bête, merci !


---------------
Mon Feed
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed