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 :

[expect] Lancer une commande remote


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Par défaut [expect] Lancer une commande remote
    Bonjour à tous,

    voilà mon soucis.

    J'ai un script expect qui doit me dumper ma base oracle se trouvant sur un serveur distant que j'accède via SSH et ma rapatrier le dump sur le serveur local.

    Le soucis que j'ai est qu'en utilisant la commande spawn, le script distant n'est pas exécuté.

    Si j'utilise la commande "system" le script est bien exécuté mais les commande "expect" et "send" ne fonctionnent et je dois à nouveau renseigner les "mot de passe" ssh.

    Code bash : 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
    #!/usr/bin/expect
    stty -echo
    send_user -- "Who are you ? "
    expect_user -re "(.*)\n"
    send_user "\n"
    stty echo
    set USER $expect_out(1,string)
    stty -echo
    send_user -- "Give me the password for $USER: "
    expect_user -re "(.*)\n"
    send_user "\n"
    stty echo
    set PWD $expect_out(1,string)
    stty -echo
    send_user -- "Now give me the password for the system user of the database:"
    expect_user -re "(.*)\n"
    send_user "\n"
    stty echo
    set ORACLE_PASS $expect_out(1,string)
    spawn ssh -t ${USER}@ip1 ssh -t ${USER}@ip2 sudo su - oracle /path/to/my/script/export_db.sh $ORACLE_PASS
    #system ssh -t ${USER}@ip1 ssh -t ${USER}@ip2 sudo su - oracle /path/to/my/script/export_db.sh $ORACLE_PASS
    #use correct prompt
    set prompt ":|#|\\\$"
    expect "password:"
    send "$PWD\r"
    expect "Enter passphrase for key"
    send "$PWD\r"
    expect "password for $USER:"
    send "$PWD\r"

    Pour résumer le "spawn" fonctionne jusqu'au moment de lancer la commande remote
    Le "system" fonctionne mais il n'y a aucune interaction "expect" ou "send"

    Merci d'avance pour vos réponses.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 059
    Billets dans le blog
    142
    Par défaut
    Bonjour,

    spawn ssh -t ${USER}@ip1 ssh -t ${USER}@ip2 sudo su - oracle /path/to/my/script/export_db.sh $ORACLE_PASS
    C'est puissant, les deux SSH qui se suivent
    Après, moi, je n'arrive généralement pas à faire de sudo, à travers ssh, mais peut être que cela ai du à l'oublie du -t.
    Savez vous si votre commande fonctionne correctement hors expect ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre émérite

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Par défaut
    Bonjour,

    merci pour votre réponse.

    Oui la commande passe correctement hors expect via un bête script bash.

    Je voulais simplement que l'utilisateur n'ait qu'une fois le mot de passe à rentrer.

    Mais j'ai peut-être trouvé une solution. Via sshpass entre le premier et le deuxième serveur et un passphrase vide entre le deuxième et troisième serveur, vu que sshpass n'existe pas sur REHL. Reste le mot de passe lors de la commande sudo.

    Mais j'ai un deuxième soucis, c'est la copie du fichier, généré sur le troisième serveur er rapatrié en local via un "cat", une ligne vide est rajoutée au déut du fichier.

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    sshpass -p ${USER_PASS} ssh -t ${USER}@${BACK_SERVER_IP} "ssh -t ${USER}@${DB_SERVER_IP}  \"cat ${REMOTE_DATA_PUMP_DIR}/${DUMP}.gz\"" | pv >     ${LOCAL_DATA_PUMP_DIR}/${DUMP}.gz

    Voili voilou

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 059
    Billets dans le blog
    142
    Par défaut
    Sinon, une authentification par clé privé/publique ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 339
    Par défaut
    Bonjour,

    Surtout que par clé privée/publique, il est possible d'encapsuler le deuxieme ssh directement dans la clé publique afin de n'avoir qu'a faire qu'un seul ssh depuis la source.

Discussions similaires

  1. [system] lancer une commande dos
    Par romuluslepunk dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 20/08/2005, 11h54
  2. [C#] Lancer une commande systeme ?
    Par Oberown dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/07/2005, 11h29
  3. [Dos] Lancer une commande dos sans attendre la fin
    Par MrEddy dans le forum Windows
    Réponses: 4
    Dernier message: 09/06/2005, 17h38
  4. Lancer une commande en C.
    Par ronan99999 dans le forum Windows
    Réponses: 2
    Dernier message: 26/07/2004, 16h25
  5. Réponses: 1
    Dernier message: 30/04/2004, 11h36

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