IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script pour connexion ssh


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Script pour connexion ssh
    Bonjour à tous,
    j'ai créé un petit script ssh me permettant de récupérer différentes informations sur plusieurs serveurs malheureusement, je n'arrive pas à récupérer les valeurs sur le serveur "maitre" puisque elles sont sur le serveurs sur lequel le script se connecte.

    En gros pour résumé mon besoin, mon script se lance à partir d'un serveur qui a toutes les clés. Et récupère des valeurs en se connectant sur d'autres serveurs. j'aimerais bien sur que les valeurs des différents serveurs soient contenues dans le fichier "retour.csv" sur le serveur "maitre".

    D'avacnce, merci beaucoup pour votre aide,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    #/bin/bash/
    for serveur in $(cat serveurs.txt)
    do
    ssh $serveur
    kernel=`uname`
    manufacturer=`dmidecode | grep 'Manufacturer:' | head -n 1 | cut -f 2 -d ' '`
    puppet=0
    if [ "$kernel" == "AIX" ]; then
            echo "Est AIX !"
            short_name=`/usr/bin/hostname | cut -f 1 -d '.'`
            domain=`/usr/bin/hostname | cut -f 2,3,4 -d '.'`
            fqdn=`/usr/bin/hostname`
            version=`/usr/bin/uname | cut -f 3,4 -d ' '`
            ip=`/etc/ifconfig en0 | grep inet | cut -c 7- | cut -f 1 -d ' '`
            ip2=`/etc/ifconfig en1 | grep inet | cut -c 7- | cut -f 1 -d ' '`
    else if [ "$kernel" == "Linux" ]; then
    	short_name=`hostname | cut -f 1 -d '.'`
    	domain=`hostname | cut -f 2,3,4 -d '.'`
    	fqdn=`hostname`
    	version=`cat /etc/redhat-release | cut -f 1,2,3 -d ' '`
    	ip=`cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep IPADDR=  | cut -f 2 -d '='`
    	ip2=`cat /etc/sysconfig/network-scripts/ifcfg-eth1 | grep IPADDR=  | cut -f 2 -d '='`
    	version_maj=`cat /etc/redhat-release  | cut -f 7 -d ' ' | cut -c -1`
    	if [ "version_maj" == "4" ]; then
    		puppet=stopped_on_rhel_4
    		else
    		puppet=`/etc/init.d/puppet status | cut -f 3 -d ' '`
    		test_retour=`echo $?`
    	fi
    		if [ "$test_retour" == "127" ]; then
    		puppet=puppet_not_found
    		else
    		test_retour=0
    	fi	
    		if [ "$manufacturer" == "VMware," ]; then
    			service_tag=`dmidecode | grep "Serial Number: VMware" | cut -c 17-`
    			else
    			service_tag=`dmidecode | grep -w "Serial Number" | head -n 1 | cut -c 18-`
    		fi
    else
    	short_name=$serveur
    	kernel="Is"
    	domain=" not"
    	fqdn=" a"
    	kernel="Linux"
    	version=" or"
    	ip=" AIX"
    	ip2=" operating"
    	service_tag=" system."
            fi
    fi
     
    echo $short_name;$domain;$fqdn;$kernel;$version;$ip;$ip2;$manufacturer;$service_tag;`date +%Y-%m-%d-%Hh%M` >> retour.csv
    logout
    done

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    Bonjour,

    il faut mettre la redirection après la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read serveur
    do
       echo "$serveur;$variablesDiverses"
    done <serveurs.txt >resultat.csv
    cf. Comment lire/parcourir un fichier
    EDIT: mais ça dépend du format du fichier à lire
    ...
    ?

    à côté de ça, il n'est pas optimale d'appeler autant de fois une commande que tu veux en extraire des informations; tu l'appelles une fois "dans une variable", et ensuite tu découpes la variable.

    EDIT 2 :
    ça ne peut pas fonctionner : ssh bloque l'exécution du reste du script.
    il faut passer les commandes à ssh ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ssh $server <<hereDoc
    commande1
    commandeN
    hereDoc
    cf. Documents en ligne (here-doc) in man bash

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour N_Bah,
    merci de prendre le temps de m'aider.

    En fait, j'ai essayé d'intégrer les commandes comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ssh $serveur 'mes commandes'
    Mes commandes sotn executés mes pas toutes et je n'arrive pas à exécuter les if, else.

    Pour heredoc, peux-tu me donner un exemple avec un bout de mon script ? (Je t'avoue que je suis un peu perdu) :-)

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Attention! Ton shebang doit être sur la 1ère ligne et doit commencer par '#!' (un sharp et un bang).

    Citation Envoyé par sinc59 Voir le message
    Bonjour N_Bah,
    merci de prendre le temps de m'aider.

    En fait, j'ai essayé d'intégrer les commandes comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh $serveur 'mes commandes'
    Mes commandes sotn executés mes pas toutes et je n'arrive pas à exécuter les if, else.
    Normal! La gestion des quotes n'est pas simple en shell (surtout que tu as des variables à évaluer). À la rigueur, il vaudrait mieux utiliser des guillemets, mais le plus simple est effectivement le 'heredoc'.

    Pour heredoc, peux-tu me donner un exemple avec un bout de mon script ? (Je t'avoue que je suis un peu perdu) :-)
    Un exemple (à tester):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
    while read serveur
    do ssh $serveur <<EOF
    kernel=\$(uname)
    manufacturer=\$(dmidecode | grep 'Manufacturer:' | head -n 1 | cut -f 2 -d ' ')
    puppet=0
    echo "$serveur;\$kernel;\$manufacturer"
    EOF
    done <serveurs.txt >resultat.csv

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Hello,
    je viens d'essayer mais il ne marche pas voici le message d'erreur que j'botiens :

    ./script.sh: line 10: syntax error: unexpected end of file

    ps: J'avais bien mis le shebang c'est juste que j'ai sauté das lignes durant la rédaction du message

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    ./script.sh: line 10: syntax error: unexpected end of file
    aurais-tu ajouter des tablations/espaces ?

    montre-nous ton script, s'il te plaît.

Discussions similaires

  1. Script pour connexion auto
    Par tmorash dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 07/04/2013, 16h28
  2. raccourci ligne de commande pour connexion ssh ?
    Par byloute dans le forum Windows 7
    Réponses: 1
    Dernier message: 06/03/2011, 22h59
  3. script pour connexion serveur ftp
    Par arthy dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 13/07/2008, 20h16
  4. Script pour fermer une session ssh
    Par le y@m's dans le forum Linux
    Réponses: 8
    Dernier message: 19/09/2005, 16h49
  5. script de connexion par ssh
    Par black_code dans le forum Modules
    Réponses: 2
    Dernier message: 25/07/2005, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo