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 :

Utilisation de expect avec ssh


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut Utilisation de expect avec ssh
    Bonjour a tous
    ,j'ai fais ce pti script en utilisant l'outil expect. Il consiste a se connecter a un pc distant en ssh, et d'executer des commande dessus.
    Par contre, le mot de passe apparait en clair, donc pour la sécurité c pas le top.
    J'aimerais savoir si il y a un moyen de le cacher ?
    merci d'avance

    #!/usr/bin/expect -f

    set force_conservative 1;

    set timeout 3
    spawn ssh 192.168.0.2
    expect "password: $"
    send "xxxxxx\r"
    interact

  2. #2
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Par défaut
    perso je suis partisan de la connection "automatique" par ssh :o
    surtout si c'est une machine sur laquelle tu te loggues souvent.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    merci kan meme, j'ai réglé le souci en mettant en parametre le mdp

    sinon est ce que vous savez comment on peut récuperer ce qu'une commande nous retourne?
    exemple:
    je tape : rpm -q AdobeReader
    --> ca m'affiche : AdobeReader n'est pas installé

    je tape : rpm -q AdobeReader_fra
    --> ca m'affiche : AdobeReader_fra-7.0.9-1

    j'aimerais tester ce qu'on me retourne.
    Si rpm -q AdobeReader_fra me retourne AdobeReader n'est pas installé
    alors je l'installe
    sinon ne rien faire.

    merci d'avance

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    maintenant jen suis a ce point là:
    j'ai fais ce script en utilisant l'outil expect. Il se connecte a distance en ssh sur un pc, et lance un script nommé script2 en lui passant un parametre:

    #!/usr/bin/expect -f
    set force_conservative 1;
    set timeout 60
    spawn ssh -l root lapp-dh187
    expect "password: $"
    send "xxxxxx\r"
    #set var 0
    expect " $"
    send -- "
    /root/Desktop/script2 [lindex $argv 0]\r"
    interact
    exit

    Ensuite j'ai ce 2eme script (nommé script2) en bash situé sur le pc distant. Il va tester si le rpm passé en parametre est installé ou non:
    #!/bin/bash
    var=$(rpm -q $1)

    if [ "$var" = "le paquetage $1 n'est pas installé" ]
    then
    echo "installation de $1"
    else
    echo "$1 deja installe"
    fi
    exit

    j'aimerais intégré le 2eme script au 1er, mais le expect ne prend pas en compte le bash (définition des variable, etc...). Je veux faire ca pour ne pas avoir de script sur l'ordinateur distant.

    Y a-t-il une solution ?
    merci d'avance

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    le resultat d'une commande et la variable shell "system" $?
    si = a 0 la commande c'est bien passé sinon erreur donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    rpm -q toto
    echo $?
    1 ==> donc erreur
    if rpm -q toto
    then
     echo "paquet installé"
    else
     echo paquet absent
    fi

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    merci,
    expect est trop compliqué (c'est du language tcl), alors j'ai changé de technique. Maintenant je me connecte automatiquement en ssh avec ssh-agent.
    voici mon script bash qui doi installer un rpm sur l'ordinateur distant:

    #!/bin/bash
    ssh ordi_distant
    rpm -i AdobeReader.rpm
    exit

    Mais ce c** m'installe le rpm sur mon ordinateur, et pas sur l'ordi distant! Savez vous svp comment faire pour executer les commande qui suivent "ssh" sur le pc distant ?
    merci d'avance

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    J'ai reussi a executer des commande sur le pc distant en faisant:
    #!/bin/bash
    ssh ordi_distant rpm -i AdobeReader.rpm logout
    exit

    mai bon, je dois ecrire pas mal de truc apres la connexion ssh, il ya moyen de laisser le code en plusieurs lignes au lieu d'une seule ?

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    Il faut mettre des ; a la fin de chaque ligne et des doubles quote apres ssh ordi_distant:

    #!/bin/bash
    ssh ordi_distant 'var=$(rpm -q $1);
    if [ "$var" = "le paquetage $1 n'est pas installé" ];
    then;
    echo "Installation de $1 en cours...";
    mkdir -p /mnt/temp;
    mount -o nolock -t nfs 134.158.96.8:/kickstart/utile /mnt/temp;
    rpm -i /mnt/temp/$1.rpm;
    umount /mnt/temp;
    else;
    echo "$1 deja installe";
    fi;'
    exit

    ca me renvoi:
    line 11: unexpected EOF while looking for matching `"'
    line 14 syntax error: unexpected end of file
    surement un soucis de quotes...

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    un grand classique
    if [ "$var" = "le paquetage $1 n'est pas installé" ];
    le ' entre l e est (l'est) ........ il ne faut pas ecrire avec des mots a apostrophe ! ou le proteger avec \)

  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    roooh quel inculte !! desolé

    #!/bin/bash
    ssh ordi_distant "var=$(rpm -q $1);
    if [ "$var" = "le paquetage $1 n\'est pas installé" ];
    then;
    echo "Installation de $1 en cours...";
    mkdir -p /mnt/temp;
    mount -o nolock -t nfs 134.158.96.8:/kickstart/utile /mnt/temp;
    rpm -i /mnt/temp/$1.rpm;
    umount /mnt/temp;
    else;
    echo "$1 deja installe";
    fi;"
    exit

    nouvelle erreur:
    bash: paquetage: command not found
    bash: -c: line 2: syntax error near unexpected token `then'
    bash: -c: line 2: `then;'

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    tin ca me soule,
    je test la commande sur une seule ligne sur mon pc (pas distant):
    #!/bin/bash
    var=$(rpm -q $1);if [ "$var" = "le paquetage $1 nest pas installé" ];then echo "Installation de $1 en cours...";mkdir /root/Desktop/REPERTOIRE;else echo "$1 deja installe";fi;
    exit
    ca marche, mais bon il me créer le repertoire sur mon pc

    et si je met cette grosse commande apres le ssh ordi_distant:
    #!/bin/bash
    ssh ordi_distant" var=$(rpm -q $1);if [ "$var" = "le paquetage $1 nest pas installé" ];then echo "Installation de $1 en cours...";mkdir /root/Desktop/REPERTOIRE;else echo "$1 deja installe";fi;"
    exit
    bash: -c: line 0: unexpected EOF while looking for matching `''
    bash: -c: line 1: syntax error: unexpected end of file

  12. #12
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    ca s'améliore un poil, ce script marche:
    #!/bin/bash
    ssh ordi_distant "var=0;
    if [ $var=0 ];
    then mkdir /root/Desktop/REPERTOIRE;
    else echo pouet;
    fi;"
    exit

    me reste plus qu'a trouver un moyen de recuperer le resultat de la commande rpm -q XXX.rpm

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    #!/bin/bash
    ssh ordi_distant '
    var=`rpm -q $1`;
    if [ $var="le paquetage nest pas installé" ];
    then mkdir /root/Desktop/REPERTOIRE;
    else echo pouet;
    fi;
    echo "le parametre est:"$1;'
    exit

    le recois en résultat:
    rpmq: aucun argument fournit à la requete
    le paramètre est:

    Je suis sur le pc A, et je veux me connecter au pc B pour y créer le repertoire /root/Desktop/REPERTOIRE.
    Donc je lance le script sur le pc A avec un parametre, mais en fait, le script se connecte au pc B et attend un parametre provenant du shell du pc B.
    Donc en gros ma question est: comment dois-je faire pour donner un parametre sur le shell du pc A, pour qu'il soit reconnu dans la partie ssh du script ?
    je sais c'est un peu tordu mais je n'ai pas pu mieux expliquer

  14. #14
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    Voici mon dernier probleme en date, donc oubliez tout les autres lol
    J'ai fais ce pti script qui va voir si le paquetage passé en paramètre est installé ou non:

    #!/bin/bash
    ssh ordi_disant "
    var=$(rpm -q $1);
    if [ $var="le paquetage nest pas install" ];
    then echo pasinstalle;
    else echo $var;
    fi;"
    exit

    me renvois:
    bash: -c: line 1: unexpected EOF while looking for matching `''
    bash: -c: line 6: syntax error: unexpected end of file

    si je met des simple quote autour de <le paquetage nest pas install>, ca me renvoit:
    bash: -c: line 2: unexpected EOF while looking for matching `''
    bash: -c: line 6: syntax error: unexpected end of file
    bizarre non ?

Discussions similaires

  1. Utilisation d'otp avec ssh
    Par manticore dans le forum Réseau
    Réponses: 7
    Dernier message: 01/10/2012, 12h58
  2. utilisation de dll avec diverses compilateurs
    Par Thylia dans le forum C++
    Réponses: 30
    Dernier message: 21/10/2004, 16h30
  3. utilisation de fetch avec select
    Par arwen dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/06/2003, 10h03
  4. Utiliser Borland C++ avec Emacs sous Windows
    Par Eikichi dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 02/03/2003, 08h40

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