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 :

Execution d'une commande telnet dans un script sh


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Execution d'une commande telnet dans un script sh
    Bonjour

    Mon problème est simple, j'aimerai exécuter une commande telnet depuis un script sh, c'est à dire me connecter sur le port d'une machine et y envoyer un message.

    Par exemple, en commandes unix, je fais ceci :

    > telnet localhost mon_port
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    Puis je saisie ma commande et le serveur distant me retourne la réponse et ferme la connexion.


    Je voudrais faire la même chose dans un script unix, mais je ne peux ni passer ma commande en paramètres de la commande telnet, ni lui passer en pipe.
    Quelqu'un sait-il comment contourner ce problème? Merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    Si tu met ton script ds un fichier et que tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    telnet tonip tonport <fichier >fichiersortie
    Ca devrais marcher ! Par contre pour le mot de passe c pas bon s'il y en a un ...

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Non, il n'y a pas de mot de passe, donc aucun problème de ce coté à priori.

    Par contre, en appliquant la méthode que tu me proposes, j'ai l'impression que la connexion est fermée prématurement, avant même l'envoi de la commande. J'ai fait ceci :

    telnet localhost 8220 <texte.txt >texte2.txt
    où texte.txt contient ma commande : GET monfichier.jsp


    Dans mon fichier texte2.txt, j'obtiens seulement :

    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.


    Pourtant, le serveur est bien censé me retourner un contenu.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    Si c'est une requete HTTP, il manque le HTTP/1.0 deriere :p
    Tu as bien mis un retour chariot à la fin ? D'ailleurs il en faut 2 des CR/LF. Sinon il attend le reste des entetes HTTP ...

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Oui, il y a bien un retour chariot à la fin de mon fichier texte.

    Effectivement, il s'agit d'une requête HTTP, mais il semblerait que ma commande fonctionne sans le HTTP/1.0 (Lorsque je la passe dans ma console telnet à la main). Peut-être intéressant pour une question de respect des normes, je ne sais pas, je ne connais pas suffisamment le protocole.
    Néanmoins, j'ai essayé avec et sans le HTTP/1.0, le résultat est le même, je n'arrive à récupérer aucun résultat.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    Hum .... j'ai la même chose ...
    Juste comme ça, pourquoi n'utilise tu pas wget ?
    Je regarde si je ne trouve pas autre chose ...

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Dans un premier temps, je préfèrerais éviter l'utilisation de wget, puisqu'il s'agit d'un outil non standard unix, et je préfèrerais me restreindre à ce domaine si c'est possible.

    D'ailleurs, je ne pense pas avoir cette possibilité sur la machine avec laquelle je travaille (pas de droits root pour installer un package).

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Pour information, j'ai adopté une solution alternative pour résoudre mon problème. C'est un peu bourrin, et je reste persuadé qu'il existe une solution plus simple, mais bon, à défaut d'autre chose...

    J'ai écrit un simple programme en C qui ouvre un socket sur mon serveur, lui envoie sa requête et attend la réponse. Ce programme est appelé par mon script shell pour récupérer le résultat.

    Merci quand même pour t'être interessé à mon soucis Getupa.

  9. #9
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Tu peux utiliser aussi une connexion rsh
    http://blog.developpez.com/index.php?blog=49

    Sinon, tu as essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    telnet < EOF
    mon_login
    mon_mot de passe (ligne vide si pas de mot de passe)
    blabla
    etc...
     
    exit
    EOF
    ?

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ce serait plutôt ceci qu'il aurait fallu mettre :

    telnet [b]<<[/b] EOF
    mon_login
    mon_mot de passe (ligne vide si pas de mot de passe)
    blabla
    etc...
    exit
    EOF


    Et non, cela ne fonctionne pas. Il ferme toujours la connexion avant de recevoir la commande (Le blabla etc...). Va savoir pourquoi...

  11. #11
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Telnet ne permet pas d'avoir un fichier de commandes. Il est donc impossible de faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $> telnet host port texte1 texte2 ...
    Ni même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $> telnet host port fichier_de_commandes
    Le seul moyen est d'utiliser un logiciel qui a été spécialement développé : http://freshmeat.net/projects/expect/

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ca a le mérite d'être clair . Cela revient à utiliser ma petite appli en C qui ouvre une connexion.

    Merci à tous

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    Désolé pour le très très grand retard!
    Mais en répondant à ce topic j'aiderai surment beaucoup de personnes sur le net.

    Pour faire marcher telnet en shell plusieurs solutions, dont expect ( que je ne trouve pas bien ... ) mais aussi : netcat

    Dans votre répertoire ~$/telnet vous avez :
    telnet.sh
    commandes (Fichier texte)


    Dans telnet.sh vous avez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netcat -t IP.IP.IP.IP PORT < commandes
    Exemple concrêt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netcat 127.0.0.1 23 < commandes
    Dans commandes vous avez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mes petites commandes telnet
    ------------------

    Admettons que nous voulons simplement initialiser une connection telnet et reprendre la main desuite après.

    Dans votre répertoire ~$/telnet vous aurez simplement telnet.sh
    Dans celui ci vous aurez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netcat -t 127.0.0.1 51234
    Et a ce moment là vous aurez la main sur votre shell.

    Et voilà

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 103
    Points
    103
    Par défaut
    Merci Yukiz pour netcat!

    Donc pour ceux qui veulent passer un mail via SMTP dans un script shell:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    nc smtp.free.fr 25 << EOF
    HELO smtp.free.fr
    MAIL FROM:<no-reply@free.fr>
    RCPT TO:<test@free.fr>
    DATA
    SUBJECT:test
    Lorem ipsum dolor tralala
    Lorem ipsum dolor pouet pouet
    .
    QUIT
    EOF

  15. #15
    Candidat au Club
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    ...
    Le seul moyen est d'utiliser un logiciel qui a été spécialement développé : http://freshmeat.net/projects/expect/
    Bonjour,

    j'ai développé un petit script Perl basé sur Expect facilitant l'automatisation des sessions telnet ou ssh sur différents types d'équipement (dont Linux et Cisco). Il est disponible sur Sourceforge sour le nom de SendCommand:
    http://sourceforge.net/projects/sendcommand/

    Il est très flexible et facile d'utilisation, par exemple pour récupérer une conf d'un ou plusieurs routeurs Cisco:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sendcommand.pl -i routers.txt -t cisco -m telnet -c "sh run"
    Pour récupérer la conf Cisco mais cette fois ci en sauvegardant les résultats de la commande dans différents fichiers de sorties (les noms de fichiers seront dérivés du fichier de input - ie: %VAR0% est la première colonne du fichier routers.txt):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sendcommand.pl -i routers.txt -t cisco -m telnet -c "sh run" -o "%VAR0%-run.txt"
    En espérant que ce sera utile

    Youri

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour, j'ai téléchargé votre script qui devrait correspondre à mes besoins.
    Je souhaite reboot mes bornes wifi cisco périodiquement.
    J'ai donc édité un fichier bornes.txt qui est à la racine de mon dossier ainsi que le script.

    Ensuite je lance votre script ainsi :

    ./sendcommand.pl -i liste.txt -t cisco -m telnet -c "reload"

    Le script ne me renvoi aucune erreur mais ma borne ne s'éteint pas.
    J'ai ensuite essayé avec :

    ./sendcommand.pl -i liste.txt -t cisco -m telnet -C commands/

    Dans le dossier /commands j'ai un fichier nommé commands1.C avec à l'intérieur un reload suivi d'un y pour la confirmation.

    Merci de bien vouloir m'aider à ce sujet.

    Cordialement,

  17. #17
    Candidat au Club
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par thxmono Voir le message
    Bonjour, j'ai téléchargé votre script qui devrait correspondre à mes besoins.
    Je souhaite reboot mes bornes wifi cisco périodiquement.
    J'ai donc édité un fichier bornes.txt qui est à la racine de mon dossier ainsi que le script.

    Ensuite je lance votre script ainsi :

    ./sendcommand.pl -i liste.txt -t cisco -m telnet -c "reload"

    Le script ne me renvoi aucune erreur mais ma borne ne s'éteint pas.
    J'ai ensuite essayé avec :

    ./sendcommand.pl -i liste.txt -t cisco -m telnet -C commands/

    Dans le dossier /commands j'ai un fichier nommé commands1.C avec à l'intérieur un reload suivi d'un y pour la confirmation.

    Merci de bien vouloir m'aider à ce sujet.

    Cordialement,
    En fait le script détecte le prompt après avoir envoyé la commande. Il faudrait être capable d'envoyer la commande reload sans que ça ne demande de confirmation.

    Essayez d'exécuter le script en mode débogage (display 5 et log de la session) et envoyez-moi le résultat du stdout et du fichier de log par MP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./sendcommand.pl -i borne.txt -t cisco -m telnet -c "reload" -d 5 -L session.log
    Youri

  18. #18
    Candidat au Club
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    La commande reload de cisco demande une confirmation alors il faudrait essayer d'y envoyer un retour chariot... Je n'ai pas de switch ou de routeur en ma possession mais je crois que la syntaxe devrait ressembler à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./sendcommand.pl -i borne.txt -t cisco -m telnet -c "reload\ry" -d 5 -L session.log
    Youri

Discussions similaires

  1. Exécuter une commande sudo dans un script shell
    Par lodacom dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 24/04/2014, 13h37
  2. Lancer une commande Perl dans un script Shell
    Par Ryo_san dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 02/06/2008, 11h01
  3. lancer une commande linux dans un script perl
    Par hammag dans le forum Langage
    Réponses: 1
    Dernier message: 21/11/2007, 16h18
  4. [cURL] Lancer une commande curl dans un script php
    Par griese dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 22/03/2007, 10h52
  5. Réponses: 5
    Dernier message: 16/03/2007, 12h16

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