Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1133 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Résolu] Quote Execute + Find pour le listing de fichier

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Quote Execute + Find pour le listing de fichier

n°2129557
Sethenssen
Posté le 04-03-2012 à 18:01:31  profilanswer
 

Bonjour,
 
Mon besoin est simple,
Depuis une machine je veux me connecter en ssh à une autre machine afin de récupérer une liste de fichier pour la traiter ensuite.
J'utilise SSH Expect
 
Quand je test ce même script sur autre serveur il fonctionne.
Quand je l'utilise sur le serveur cible, cela ne fonctionne pas à cause je pense d'un timeout?
 
Je requière donc votre aide pour trouver où cela coince.
 

Code :
  1. #!/usr/bin/perl -w
  2. # Purpose: SSH Expect
  3. use warnings;
  4. use strict;
  5. use MIME::Lite;
  6. use MIME::Lite::HTML;
  7. package Net::SMTP::TLS;
  8. use MIME::Base64;
  9. use Authen::SASL;
  10. use LWP::Simple;
  11. use File::Copy;
  12. use File::Find;
  13. use Net::SSH::Expect;
  14.  
  15. my $ssh = Net::SSH::Expect->new (
  16.    host => "10.212.13.14",
  17.    password=> 'PerlForever',
  18.    user => 'toto',
  19.    raw_pty => 1
  20. );
  21.  
  22. my $login_output = $ssh->login();
  23. if ($login_output !~ /Last/) {
  24.    die "Login has failed.\n";
  25. }
  26.  
  27. my $ls = $ssh->exec("ls -ltr /home/toto/201203*" );
  28. print($ls."\n" );
  29.  
  30. $ssh->close();
  31. __END__


 
Voici ce que j'obtiens en réponse:

Code :
  1. SSHAuthenticationError Login timed out. The input stream currently has the contents bellow: Last login: Sun Mar  4 17:50:33 2012 from 10.212.13.12
  2. The Following es are available
  3. [toto@SRV2 ~]$  at /usr/share/perl5/Expect.pm line 813


 
Quand j'ouvre le fichier /usr/share/perl5/Expect.pm à la ligne 813 j'ai

Code :
  1. $ret = &{$timeout_hook->[3]}($_[0]->[0]);


Message édité par Sethenssen le 06-03-2012 à 09:28:24
mood
Publicité
Posté le 04-03-2012 à 18:01:31  profilanswer
 

n°2129576
gilou
Modérateur
Modzilla
Posté le 04-03-2012 à 21:31:51  profilanswer
 

Ben et en changeant la valeur du timeout par défaut, ça donne quoi?
timeout => xxx
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2129587
Sethenssen
Posté le 05-03-2012 à 00:25:05  profilanswer
 

si je mets timeout => 30
cela va me mettre 30sec à m'afficher le même résultat

n°2129588
gilou
Modérateur
Modzilla
Posté le 05-03-2012 à 01:50:11  profilanswer
 

De toute façon, la, ça ne vient pas du script, comme le prouve la ligne
>> Quand je test ce même script sur autre serveur il fonctionne.  
Ça vient apparemment de ta configuration SSH, et j'ai pas de billes la dessus.
A tout hasard, lances le script avec l'option
debug => 1
A+,


Message édité par gilou le 05-03-2012 à 01:50:57

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2129710
Sethenssen
Posté le 05-03-2012 à 21:22:54  profilanswer
 

Bonsoir,
 
Pour ma requête je vais laisser tomber ssh expect et le faire directement

Code :
  1. my $ls = `ssh toto\@srv-02 find /home/toto -maxdepth 1 -type f -name "TXT*" -mtime 0`;
  2. chop $ls;
  3. print($ls."\n" );


Ceci fonctionne bien,
Cependant je voudrai trier la liste des fichiers trouvés pour ainsi ne récupérer que les 2 dernières concurrences.
 
Comme si sur la machine je faisais en local un :

Code :
  1. ls -ltr `find /home/toto -maxdepth 1 -type f -name "TXT*" -mtime 0` | tail -2


 
Donc j'essaye tout bêtement d'intégrer mon ls -ltr dans mon find, mais cela ne fonctionne pas
 

Code :
  1. my $ls = `ssh toto\@srv-02 ls -ltr ``find /home/toto -maxdepth 1 -type f -name \"TXT*\" -mtime 0```;
  2. chop $ls;
  3. print($ls."\n" );


 
Une p'tite aide ne serait pas de refus !
Merci.


Message édité par Sethenssen le 05-03-2012 à 21:23:43
n°2129720
gilou
Modérateur
Modzilla
Posté le 05-03-2012 à 22:36:44  profilanswer
 

Pourquoi pas essayer de passer par un quote execute plutôt que les backticks?

Code :
  1. my $ls = qx{ssh toto\@srv-02 ls -ltr `find /home/toto -maxdepth 1 -type f -name "TXT*" -mtime 0` | tail -2};


ou  

Code :
  1. my $ls = qx{ssh toto\@srv-02 ls -ltr `find /home/toto -maxdepth 1 -type f -name "TXT*" -mtime 0`};


A+,


Message édité par gilou le 05-03-2012 à 22:39:10

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2129722
Sethenssen
Posté le 05-03-2012 à 22:48:07  profilanswer
 

Car je ne maîtrise pas du tout encore le quote execute,
Cependant cela n'affiche pas le résultat escompté
 
Il me dit:
 
find: `/home/toto': No such file or directory
 
Je précise que les fichiers sont bien présents et que ce message je l'ai déjà eu avec mes backticks

n°2129729
gilou
Modérateur
Modzilla
Posté le 05-03-2012 à 23:17:08  profilanswer
 

Faut tester jusqu'a ce que ça passe, je suis trop grippé pour bien réfléchir ce soir.
Je tenterais
my $ls = qx{ssh toto\@srv-02 ls -ltr \`find /home/toto -maxdepth 1 -type f -name "TXT*" -mtime 0\`};
a tout hasard
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2129748
Sethenssen
Posté le 06-03-2012 à 08:51:23  profilanswer
 

Je tente, je tente mais sans succès
Du coup j'essaye de le faire directement dans le find, j'ai trouvé que le "-ls" était possible
 

Code :
  1. my $ls = qx{ssh toto\@srv-02 find /home/toto -maxdepth 1 -type f -name "TXT*" -mtime 0 -ls};


Mais hélas il me manque que le tri, et je n'ai pas trouvé dans le find de sort ou le fameux -ltr :(

n°2129754
Sethenssen
Posté le 06-03-2012 à 09:24:55  profilanswer
 

C'est bon cela fonctionne avec un simple sort
 

Code :
  1. my $ls = qx{ssh toto\@srv-02 find /home/toto -maxdepth 1 -type f -name "TXT*" -mtime 0 -ls | sort -k9};


 
Merci !


Message édité par Sethenssen le 06-03-2012 à 09:28:04
mood
Publicité
Posté le 06-03-2012 à 09:24:55  profilanswer
 

n°2129776
gilou
Modérateur
Modzilla
Posté le 06-03-2012 à 11:34:13  profilanswer
 

Un truc comme cela:

Citation :

my $ls = `ssh toto\@srv-02 ls -ltr \`find /home/toto -maxdepth 1 -type f -name \"TXT*\" -mtime 0\``;


devait pas être très éloigné de la solution, car au vu d'une page web, les `dans un `doivent être escapés.
Après, il faut voir ce qui doit être escapé ou pas dans le reste, " ou \" par exemple.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2130190
Sethenssen
Posté le 07-03-2012 à 21:04:41  profilanswer
 

Merci Gilou,
 
J'ai une dernière question
Avec quote execute, est-ce que l'on peut entrer en paramètre le mot de pass du serveur distant?
Ou bien est-on obligé de copier les clé rsa sur le serveur distant?
 
Je dis ça car je travail sur un serveur Cisco là où il m'est impossible d'y copier les clés.
Expect SSH est une bonne solution car je peux rentrer le login/pwd en paramètre

n°2130208
gilou
Modérateur
Modzilla
Posté le 07-03-2012 à 22:39:33  profilanswer
 

Dans le texte d'un quote execute, on peut mettre des variables perl, qui seront évaluées à l'exec.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2130209
Sethenssen
Posté le 07-03-2012 à 22:42:19  profilanswer
 

Ok merci.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Résolu] Quote Execute + Find pour le listing de fichier

 

Sujets relatifs
problème sur le main javaProblème VBS 2008 API showwindow
[AJAX/XMLHttpRequest] Probleme interrogation de données.Problème d'affichage CSS sous Internet Explorer
[Résolu][Java] Problème sc.nextDouble()[RESOLU] Plusieurs "like" de suite + probleme jointure
Perl , Problème /Problème ajax
Probleme Prototype Affichage Page 
Plus de sujets relatifs à : [Résolu] Quote Execute + Find pour le listing de fichier


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR