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 :

Ajout d'extension aux hostnames et connexion distante via telnet et SSH


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Ajout d'extension aux hostnames et connexion distante via telnet et SSH
    Bonjour,

    Est-ce possible d'avoir votre aide (désolé, je débute en programmation et en shell). Voici mon problème...

    J'ai un fichier texte de 170 lignes de hostnames (host1, host2, host3, etc). Chaque hostname se trouve tout seul sur une ligne de ce fichier. A partir d'une machine distante, je souhaite utiliser TELNET ou SSH afin d'exécuter des commandes (ex. : prtdiag -v | grep -i ps ), et récupérer les résultats de ces commandes dans un fichier "resultats" de cette façon : Hostname sur une ligne, suivit des outputs des commandes sur la ligne suivante du fichier "resultats".

    1° Comment je peux d'abord ajouter à chaque hostname l'extension "-my.dc", par exemple pour le "host1" : host1-my.dc ?

    2° Ensuite, comment faire pour que telnet et ssh (utilisant chacun un login et un password) puissent me connecter sur chaque hostname : host*-my.dc, puis exécuter des commandes et récupérer les résultats dans un fichier, comme cela a été décrit plus haut?

    D'avance Merci

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Serait-il possible d'avoir un extrait de ce fichier ? Oui c'est sans aucun doute possible mais sans avoir un format précis des lignes de ce fichier, nous ne pouvons donner de réponses exactes et surtout optimales (va t-ont se contenter de Bash, va t-ont utiliser awk, ou sed, etc)...

    Actuellement nous ne savons pas si chaque ligne ne contient que le hostname de vos machines distantes ou pas, par exemple...

    Je vais néanmoins donner un début de piste possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat list_host 
    host1
    host2
    host3
    $ sed "s/^\(.*\)$/\1-my.dc/g" list_host 
    host1-my.dc
    host2-my.dc
    host3-my.dc
    $ sed "s/^\(.*\)$/\1-my.dc/g" list_host|xargs -I{} ssh {} "command" >> fichier.out
    Idriss

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par Flodelarab Voir le message
    Pour la commande sed, voici un peu plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/.*/&-my.dc/' liste_170_hostnames.txt
    Encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/$/-my.dc/' liste_170_hostnames.txt


    Par contre je plussoie la 1ère partie (read)
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Bonjour,
    Voici d'autres méthodes qui peuvent faire le travail, sachant que la méthode de la boucle while déjà proposée est bien souvent la plus adaptée puisqu'elle permet de faire d'autres actions dans la même boucle sans pour autant changer les fichiers d'origine:

    -Via echo avec l'aide de xargs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ xargs -I{} -a list-host.txt echo {}-my.dc
    host1-my.dc
    host2-my.dc
    host3-my.dc
    -Via printf toujours avec l'aide de xargs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ xargs -a list-host.txt printf "%s-my.dc\n"
    host1-my.dc
    host2-my.dc
    host3-my.dc
    Via awk (méthode classique):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk '{print $0 "-my.dc"}' list-host.txt 
    host1-my.dc
    host2-my.dc
    host3-my.dc
    Via awk (méthode alternative):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk '$0=$0"-my.dc"' list-host.txt 
    host1-my.dc
    host2-my.dc
    host3-my.dc
    Cordialement.

  6. #6
    Candidat au Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci de votre aide à la première question : la format :
    host1-my.dc
    host2-my.dc
    host3-my.dc
    .....

    Est exactement le format que je voulais obtenir!

    Mais maintenant que la liste ci-dessus a été créée, comment faire pour aller sur chaque hostname via telnet ou ssh pour exécuter des commandes et récupérer les résultats?

    Merci

  7. #7
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Re bonjour.

    Personnellement, je ferais bien un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/$/-my.dc/' list_host|xargs -I{} ssh {} "commande à exécuter sur la machine distante"
    En reprenant l'expression simplifiée de zipe31 (bien sûr peut être remplacé par n'importe quelles alternatives awk ou autres présentées dans la discussion).

    Idriss

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Euh, je ne pense pas que cela fonctionne comme ceci, xargs fournira les arguments à la fin de la commande si on ne lui dit pas de faire autrement...
    De plus, la versions xargs que je montrais avec echo peut très bien fonctionner avec ssh qui remplacerait justement echo, le sed serait utile que si on était sur un environnement non gnu.
    Mais toutes ces solutions ne sont viables que pour du script jetable, pas pour du long terme car la sécurité est plus que précaire dans ces cas, donc:
    -Est-ce pour du long terme ou juste pour une fois ?
    -Si long terme, quelles commandes dois-tu effectuer (en étant exhaustif si possible <= très important) ?
    Dans tous les cas, renseigne toi sur le fait d'utiliser une paire de clé privée/publique avec ssh au lieu de login/password (très important aussi, ne serait-ce que pour la bonne pratique dés le départ).
    Cordialement.

  9. #9
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Euh, je ne pense pas que cela fonctionne comme ceci, xargs fournira les arguments à la fin de la commande si on ne lui dit pas de faire autrement...
    En effet, pas fait gaffe
    J'ai mis à jour ma réponse

    Citation Envoyé par disedorgue Voir le message
    De plus, la versions xargs que je montrais avec echo peut très bien fonctionner avec ssh qui remplacerait justement echo, le sed serait utile que si on était sur un environnement non gnu.
    Dans ma version, le sed est en effet superflus donc d'accord aussi. Après je ne sais pas s'il l'auteur ne voulait pas modifier le contenu de son fichier pour y rajouter le suffixe "-my.dc" à chaque host. En tout cas, ma version peut être remplacée par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ xargs -I{} -a list_host.txt ssh {}-my.dc "commande à exécuter"
    ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read -r; do ssh "${REPLY}-my.dc" "commandes à exécuter"; done < list_host.txt

  10. #10
    Candidat au Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour à tous !

    Pour répondre à disedorgue :

    - Pour le moment, c'est du cours terme, commandes à lancer de temps en temps. On verra après comment cela va évoluer.

    Voici les commandes à exécuter :
    - "pkginfo -il | grep -i explorer"
    - "prtdiag -v | grep -i ps"
    - "uname -a"
    - "cat /etc/release"

    En plus,
    - Sur des M3000/4000, je cherche à récupérer, à partir de la XSCF, le résultat de la commande : "version -c xcp"
    - Sur des x86, le résultat de la commande à partir de l'ILOM : "ipmitool -I lan -H <ILOM IP address> -U <ILOM Username> chassis power on"

    Bien entendu, je souhaite ne pas rentrer à chaque fois à la main le login/password pour chaque serveur!

    - Pas le droit d'utiliser une paire de clé publique/privée entre les serveurs. Ceci étant, j'aimerais bien, pour ma culture, savoir comment on pourrait gérer les connexions avec une paire de clé Privée/publique...

    Sinon dans les commandes proposées avec SSH, quid du password? Comment est-il géré pour chaque serveur?
    Autre chose : certains serveurs sont trop vieux et donc n'ont pas de SSH mais plutot TELNET. Puis-je savoir comment faire pour gérer la connexion de chaque serveur selon qu'il s'agit de ssh ou de telnet ?

    Merci

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Pour des informations sur les paires de clés ssh, regarde le lien suivant qui permet de faire l'essentiel sur le sujet:
    http://www.linux-france.org/prj/edu/...e/ch13s03.html
    Par contre, cela ne parle pas de toutes les choses faisable avec une clé, comme par exemple positionner une commande à exécuter en lieu et place du shell.
    Ensuite, depuis le fichier de configuration client ssh, on peut aussi configurer, entre autre, des alias de hostname ainsi que l'user avec lequel accéder au hostname en question.

    Pour ton besoin, principalement ce qui concerne telnet, l'une des solutions les plus utilisées est la commande "expect" que je ne developperait pas ici car celle-ci est largement documenté sur le net mais en gros, c'est un automate en TCL à laquelle on dit quoi faire quand elle reçoit tel ou tel réponse sur son terminal.
    Cordialement.

  12. #12
    Candidat au Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour disedorgue, bonjour à tous,

    Merci pour le lien.

    Si j'ai bien compris :

    - Mis à part l'usage d'une paire de clés publique/privée, il n'y a pas un autre moyen pour lancer dans la foulée (càd en mode silencieux) des connexions sur chaque sevrer de ma liste de serveurs : host1-my.dc, host2-my.dc,..., même avec login/password en clair ? Etant rappelé que j'ai à mettre les connexions et les commandes dans un script qui se trouve sur une machine donnée du même subnet. Le but étant juste que le script se lance et se connecte à chaque machine, exécuter les commandes, le tout sans me demander à chaque fois de rentrer le login/password.

    - Et pour les connexions TELNET, aucune autre solution à part "expect" ?

    Merci

  13. #13
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Pour ma part, je ne connais pas d'autre outils que expect pour telnet, même des langages tel que perl on un module expect pour ce genre de chose.
    Concernant ssh, il existe des clients tel que plink (en principe sous windows, mais semble exister pour linux) auquel tu peux lui passer en paramètre le password, ou alors tu peux aussi utiliser expect.
    En cherchant un peu sur le net, tu devrais pouvoir trouver des script expect pratiquement près à l'emploi que soit pour telnet ou pour ssh.
    Cordialement.

Discussions similaires

  1. connexion à distance via telnet ou ssh ?
    Par yoh852 dans le forum Réseau
    Réponses: 2
    Dernier message: 04/04/2013, 12h25
  2. Connexion distante via SQLCMD
    Par tibal dans le forum Outils
    Réponses: 1
    Dernier message: 03/01/2013, 15h56
  3. Réponses: 2
    Dernier message: 09/04/2008, 09h55
  4. connexion switch via telnet
    Par sisina dans le forum Hardware
    Réponses: 2
    Dernier message: 26/02/2008, 14h25
  5. connexion à linux via telnet windows en root
    Par Purple Haze dans le forum Réseau
    Réponses: 4
    Dernier message: 24/03/2007, 00h36

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