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

Linux Discussion :

Expect - SFTP


Sujet :

Linux

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut Expect - SFTP
    Bonjour,

    J'ai réalisé un script Expect pour copier un fichier via sftp :

    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
    #!/usr/bin/expect -f 
     
    set SYSTEM [lindex $argv 0] 
    set USER [lindex $argv 1] 
    set PASSWORD [lindex $argv 2] 
     
    spawn /usr/bin/sftp $USER@$SYSTEM 
     
    expect "Are you sure you want to continue connecting (yes/no)?" 
    send "yes \r" 
     
    expect "password:" 
    send "$PASSWORD \r" 
     
    expect "sftp> " 
    send "put resolv.conf /etc/resolv.conf \r" 
    expect "sftp> " 
     
    send "bye \r" 
     
    exit 0
    Le script fonctionne, hormis la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    expect "Are you sure you want to continue connecting (yes/no)?" 
    send "yes \r"
    En effet, quand c'est la 1er fois que je me connecte sur le serveur, cette commande passe bien, mais lors d'une seconde connexion, cette commande met en erreur le script, car le système ne me renvoit pas l'instruction "Are you sure you want to continue connecting (yes/no)?" et cela fait planter ma prochaine commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    expect "password:" 
    send "$PASSWORD \r"
    Comment faire pour lui dire : Si tu as l'instruction "Are you sure you want to continue connecting (yes/no)?" tu envoies la commande "Yes", sinon tu passes à la suite ?

    Aussi, pour cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    expect "password:" 
    send "$PASSWORD \r"
    est-il possible de lui donner une liste de 5 mots de passes différents et que si le 1er ne fonctionne pas, il essaie avec le 2eme, etc... ? Si oui, comment on fait ?

    Merci d'avance pour vos indications.

    Arnaud

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Citation Envoyé par arnaudperfect Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    expect "Are you sure you want to continue connecting (yes/no)?" 
    send "yes \r"
    En effet, quand c'est la 1er fois que je me connecte sur le serveur, cette commande passe bien, mais lors d'une seconde connexion, cette commande met en erreur le script, car le système ne me renvoit pas l'instruction "Are you sure you want to continue connecting (yes/no)?" et cela fait planter ma prochaine commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    expect "password:" 
    send "$PASSWORD \r"
    Comment faire pour lui dire : Si tu as l'instruction "Are you sure you want to continue connecting (yes/no)?" tu envoies la commande "Yes", sinon tu passes à la suite ?
    J'ai trouvé un élément de réponse :

    expect_before {Are you sure you want to continue connecting (yes/no)} {send \"yes\r\"; exp_continue}" => On indique a expect qu'il est possible (mais pas pas obligatoire) qu'il recoive le texte "Are you sure you want to continue connecting (yes/no)" avant celui qu'on lui demande d'écouter (cf '-c expect ..' ci dessous) et dans ce cas, il devra répondre "yes"
    Mais je n'arrive pas à l'implémenté.

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    J'ai trouvé !!

    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
    #!/usr/bin/expect -f 
     
    set SYSTEM [lindex $argv 0] 
    set USER [lindex $argv 1] 
    set PASSWORD [lindex $argv 2] 
    set timeout 10 
     
    spawn /usr/bin/sftp $USER@$SYSTEM 
     
    expect { 
    # si entrée présente 
            "Are you sure you want to continue connecting (yes/no)?" { 
                    # Entrée "yes" 
                    send "yes\r" 
                    expect "password:" 
                    send "$PASSWORD \r"         
            } 
            "password:" { 
                    send "$PASSWORD \r" 
            } 
    } 
     
    expect "sftp> " 
    send "put resolv.conf /etc/resolv.conf \r" 
    expect "sftp> " 
    send "bye \r" 
     
    exit 0
    Cependant, je me demande comment on peux gérer les erreurs, pour écrire un log par exemple...

Discussions similaires

  1. [KSH] Un appel au SFTP sous expect qui fonctionne plus
    Par mederik dans le forum Shell et commandes POSIX
    Réponses: 8
    Dernier message: 06/06/2013, 17h00
  2. Transfert sftp via script sh, sans expect
    Par asplamagnifique dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 05/05/2010, 12h51
  3. [Débutant(e)]Erreur 'class' or 'interface' expect
    Par chevy dans le forum Général Java
    Réponses: 7
    Dernier message: 30/03/2005, 08h13
  4. Problème avec le lieur "Expected a file name : "
    Par RA/m dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/06/2004, 08h41
  5. [Plugin]package does not match the expected package src
    Par Fladnag dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 10/03/2004, 20h17

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