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 :

Commande de suppression via ssh => automatisation


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2012
    Messages : 22
    Points : 33
    Points
    33
    Par défaut Commande de suppression via ssh => automatisation
    Bonjour,

    Sur un parc d'une vingtaine de VM, j'en utilise une comme machine référentielle, pour redescendre des scripts sur les autres, avec un script comprenant ce type de boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for vm in ${liste_vms}
    do
      echo "<br>Copie de ${hostname} vers ${vm} :"
      scp -r ${source}/* mid@${vm}:${cible}
      echo " Copie OK"
    done
    Cela fonctionne très bien.

    Maintenant je souhaite automatiser des connexions ssh suivi de commande sur les machines distantes, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for vm in ${liste_vms}
    do
      ssh user@${vm}
      pwd
    done
    Pour rappel, pas de problème bien sûr de clé RSA pour l'authentification distante du user.
    Et je suis conscient du risque à automatiser des tâches distantes (pourquoi pas un rm sur la cible ...).

    Mais je bloque après la commande ssh, en fait j'arrive sur la machine distante, mais je n'arrive pas à automatiser la commande suivante (pwd dans mon exemple), je me prends le prompt sur la cible :

    ld002midAAAA@mid:/tools/list/product/websphere70/httpserver/cgi-bin/monitoring >ssh mid@ld002midBBBB.cloud.group.gca
    Last login: Wed Dec 16 10:08:08 2015 from 10.179.139.79
    ld002midBBBB@mid:/tools/list/product >

    Comment faire pour que la commande pwd (dans cet exemple) fonctionne, afin que la boucle for passe sur la VM suivante, sans arrêt.

    Merci par avance pour votre aide.

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    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 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Bonjour,

    La commande à passer se trouve à la fin de ta ligne ssh, donc si je reprend ton exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for vm in ${liste_vms}
    do
      ssh user@${vm} pwd
    done
    Je te conseille de lire le man de ssh, car il y a quelques subtilités comme le fait de ne pas ouvrir de terminal sur le serveur,...
    Cordialement.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2012
    Messages : 22
    Points : 33
    Points
    33
    Par défaut
    D'abord merci pour la célérité de la réponse :-)

    Donc en gros je balance une commande dans la foulée de ma connexion ssh.

    Et comment je m'y prend si je souhaite une séquence de commande distantes !?
    Car je souhaite lancer une séquence suivant un cours logique.

    Du genre : ssh user@machine_cible cd /tmp; ls -lrt; cd /app/list; find . | wc -l

    Mais bien sûr cette syntaxe ne fonctionne pas, la machine cible rendant la main après la commande cd /tmp, et le reste des commandes se lancent sur la machine hôte.

    Remarque : La séquence ci-dessus est donnée pour exemple, elle n'a pas vocation d'être utile (la séquence réelle le sera)

    EDIT :

    Solution trouvée :

    ssh user@machine_cible 'cd /tmp; ls -lrt; cd /app/list; find . | wc -l'

    tout simplement ... (une erreur me faisait penser que ce n'était pas la bonne syntaxe ...)

    Ce sujet peut être clos, merci pour l'aide.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2012
    Messages : 22
    Points : 33
    Points
    33
    Par défaut
    Une dernière question (je sais j'abuse, mais un autre sujet aurait demandé un récapitulatif de celui-ci) :

    Ma boucle dans mon script principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for vm in ${liste_vms}
    do
      echo "<br>Connexion de ${hostname} vers ${vm} :"
      ssh mid@${vm} < commandes_distantes.sh
    done

    Le fichier "commandes_distantes.sh" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hostname
    cat /etc/hosts | grep `hostname`
    Le résultat (une partie du résultat concernant une des VMs) :

    <br>Connexion de ld002mid7573.cloud.group.gca vers lr002mid8502.cloud.group.gca :
    Pseudo-terminal will not be allocated because stdin is not a terminal.
    stty: standard input: Invalid argument

    lr002mid8502
    127.0.0.1 lr002mid8502.prodinfo.gca lr002mid8502 localhost localhost.localdomain localhost4 localhost4.localdomain4
    10.179.227.73 lr002mid8502.localdomain lr002mid8502.prodinfo.gca lr002mid8502
    Le script me retourne bien le résultat des commandes distantes, mais râle sur la sortie standard, comment je m'y prend pour rendre cela "clean" s'il vous plaît ?

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Bonjour

    Il râle sur l'écran, probablement pas sur la sortie standard. Mais sur la sortie d'erreur. Le canal 2. Redirige-le vers un fichier de log.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh mid@${vm} < commandes_distantes.sh 2>log.txt
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    si je me souviens bien il y a une option sur ssh pour forcer l'allocation d'un pseudo-terminal, ssh -N je crois, à vérifier

    Edit: raté c'est ssh -t

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2012
    Messages : 22
    Points : 33
    Points
    33
    Par défaut
    Alors, retour d'information.

    La solution simple et efficace de Flodelarab marche parfaitement.

    Pour ce qui est d'option -t elle ne régle pas le problème (sur ma machine).
    En revanche l'option -T me fait gagner seulement une ligne ^^

    Connexion de ld002mid7573.cloud.group.gca vers ld002mid8502.cloud.group.gca :
    stty: standard input: Invalid argument
    ld002mid8502
    127.0.0.1 ld002mid8502.prodinfo.gca ld002mid8502 localhost localhost.localdomain localhost4 localhost4.localdomain4
    10.179.227.74 ld002mid8502.prodinfo.gca ld002mid8502
    Le man ssh précise :

    -T Disable pseudo-tty allocation.

    -t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very use-
    ful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.
    Pour information, le -N force à ne rien faire en distant.

    -N Do not execute a remote command. This is useful for just forwarding ports (protocol version 2 only).
    Bref ... j'ai ma soluce avec la redirection, j'avance, et encore merci à vous trois pour votre aide, bonne journée.
    Sujet clos, cette fois.

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Nota bene: Cette redirection écrase ton fichier de traces à chaque fois.
    Tu peux utiliser "2>> log.txt" pour que l'information s'accumule en fin de fichier.
    Tu peux ajouter un traitement pour rajouter un horodatage.

    Le problème est que ton fichier va gonfler, gonfler, gonfler au fil du temps. Il faut prévoir une procédure de maintenance/nettoyage.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 076
    Points : 4 392
    Points
    4 392
    Par défaut
    Bonjour,

    Citation Envoyé par romegonic Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hostname
    cat /etc/hosts | grep `hostname`
    en passant cat | grep c'est un peu redondant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "$(hostname)"  /etc/hosts
    $moi= ( !== ) ? : ;

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par papajoker Voir le message
    en passant cat | grep c'est un peu redondant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "$(hostname)"  /etc/hosts
    On appelle ça un UUOC

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2012
    Messages : 22
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Bonjour,


    en passant cat | grep c'est un peu redondant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "$(hostname)"  /etc/hosts

    L'idée n'était pas d'utiliser une commande correcte/optimisée mais plutôt de créer une commande cat pour vérifier que j'étais bien dans le /etc/hosts de la machine distante, et non dans celui de la machine hôte du script.

    Par ailleurs, ma question portait sur le lancement d'une séquence de commandes, pas sur la pertinence d'une commande dans cette séquence :-)

  12. #12
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par romegonic Voir le message
    L'idée n'était pas d'utiliser une commande correcte/optimisée (...)
    Par ailleurs, ma question portait (...) pas sur la pertinence
    t'as raison chercher à faire mieux c'est surfait

    et à la fois on est pas des robots non plus, désolé de polluer ton thread avec des considérations qui dépassent le cadre de ta question

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/08/2010, 11h12
  2. Ligne de commande pour copier un dossier via SSH
    Par Daikyo dans le forum Administration système
    Réponses: 4
    Dernier message: 29/09/2009, 23h21
  3. Comment sauvegarder MySQL via SSH ?
    Par Blade dans le forum Administration
    Réponses: 7
    Dernier message: 30/09/2004, 15h03
  4. [cvs] Jbuilder 9, Cvs Via Ssh Sous Windows
    Par SurfingPoP dans le forum JBuilder
    Réponses: 3
    Dernier message: 13/02/2004, 16h57

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