[RESOLU] connexion SSH2 sous windows

connexion SSH2 sous windows [RESOLU] - Perl - Programmation

Marsh Posté le 05-04-2011 à 08:54:49    

Bonjour,
 
J'aimerais créer une connexion SSH avec le protocole 2 d'une machine Windows vers une machine UNIX via le système clef privé/publique.
 
Pour cela j'ai donc créé un jeu de clef (id_dsa, id_dsa.pub) et j'ai renseigné le code perl suivant :  
 

Code :
  1. use strict;
  2. use Net::SSH::Perl;
  3. #use Math::Pari;
  4. #use lib "H:\\TASKS\\TOOLS\\Perl\\lib\\Math";
  5. my @id = ("id_dsa" ); #<<<< la fameuse clef privée
  6. my %params = (
  7. port => 22,
  8. protocol => 2,
  9. interactive => 0,
  10. identity_files => [@id],
  11. debug => 3,
  12. options => [
  13. "BatchMode yes",
  14. "AuthenticationSuccessMsg no",
  15. "ForwardX11 no",
  16. "ForwardAgent no"
  17. ]
  18. );
  19. my $host = "la_machine_unix";
  20. my $username = "un_utilisateur_valide";
  21. my $ssh = Net::SSH::Perl->new($host, %params); #<<<< la connection
  22. $ssh->login($username);
  23. my $cmd = "pwd";
  24. my $data = $ssh->cmd($cmd);
  25. print $data;


 
ET la je tombe sur une erreur m'indiquant qu'il me manque le paquet Net::SSH:Perl.
Pour l'installer, je tape donc en ligne de commande dans un shell : ppm install Net-SSH-Perl.
J'obtiens l'affichage suivant :
 

Code :
  1. C:\Documents and Settings\mageni>ppm install Net-SSH-Perl
  2. Syncing site PPM database with .packlists...done
  3. Syncing perl PPM database with .packlists...done
  4. Downloading Net-SSH-Perl-1.23...done
  5. Downloading Crypt-DH-0.06...done
  6. Downloading Math-Pari-2.01080604...done
  7. Downloading Crypt-IDEA-1.08...done
  8. Downloading Convert-PEM-0.08...done
  9. Downloading String-CRC32-1.4...done
  10. Downloading Math-GMP-2.06...done
  11. Downloading Digest-MD5-2.51...done
  12. Downloading Digest-HMAC-1.02...done
  13. Downloading Crypt-DSA-1.16...done
  14. Downloading Digest-SHA1-2.13...done
  15. Downloading MIME-Base64-3.13...done
  16. Downloading Math-BigInt-1.993...done
  17. Downloading Crypt-DES_EDE3-0.01...done
  18. Downloading Convert-ASN1-0.22...done
  19. Downloading Class-ErrorHandler-0.01...done
  20. Downloading Crypt-DES-2.05...done
  21. Unpacking Net-SSH-Perl-1.23...done
  22. Unpacking Crypt-DH-0.06...done
  23. Unpacking Math-Pari-2.01080604...done
  24. Unpacking Crypt-IDEA-1.08...done
  25. Unpacking Convert-PEM-0.08...done
  26. Unpacking String-CRC32-1.4...done
  27. Unpacking Math-GMP-2.06...done
  28. Unpacking Digest-MD5-2.51...done
  29. Unpacking Digest-HMAC-1.02...done
  30. Unpacking Crypt-DSA-1.16...done
  31. Unpacking Digest-SHA1-2.13...done
  32. Unpacking MIME-Base64-3.13...done
  33. Unpacking Math-BigInt-1.993...done
  34. Unpacking Crypt-DES_EDE3-0.01...done
  35. Unpacking Convert-ASN1-0.22...done
  36. Unpacking Class-ErrorHandler-0.01...done
  37. Unpacking Crypt-DES-2.05...done
  38. Generating HTML for Net-SSH-Perl-1.23...done
  39. Updating files in site area...done
  40. 123 files installed


 
 tout semble bien se passer, je vais dans C:\Temp ou je localise un dossier :  
 "perl------------please-run-the-install-script------------"
 Et la petit soucis, rien de type .exec,.bat, etc...
 Du coup, je cherche un peu et on me dit qu'il suffit de copier les fichiers contenus dans C:\Temp\perl------------please-run-the-install-script------------\site\lib
 à la bonne place dans ma lib perl :"Perl\lib"
 Je copie les dits fichiers, puis lance mon test.pl contenant le précédant code.
 
 Et là, j'obtiens les erreurs suivantes :
 

Code :
  1. C:\Documents and Settings\mageni>perl "C:\[..]\tests\test.pl"
  2. dk239023: Reading configuration data /.ssh/config
  3. dk239023: Reading configuration data /etc/ssh_config
  4. dk239023: Connecting to la_machine_unix, port 22.
  5. dk239023: Remote protocol version 2.0, remote software version Sun_SSH_1.1
  6. Can't locate loadable object for module Math::Pari in @INC (@INC contains: H:/TASKS/TOOLS/Perl/site/lib H:/TASKS/TOOLS/Perl/lib .) at H:/TASKS/TOOLS/Perl/lib/Net/SSH/Perl/Util/SSH2MP.pm line 6
  7. Compilation failed in require at H:/TASKS/TOOLS/Perl/lib/Net/SSH/Perl/Util/SSH2MP.pm line 6, <GEN0> line 1.
  8. BEGIN failed--compilation aborted at H:/TASKS/TOOLS/Perl/lib/Net/SSH/Perl/Util/S
  9. SH2MP.pm line 6, <GEN0> line 1.
  10. Compilation failed in require at H:/TASKS/TOOLS/Perl/lib/Net/SSH/Perl/Util.pm line 56, <GEN0> line 1.
  11. BEGIN failed--compilation aborted at H:/TASKS/TOOLS/Perl/lib/Net/SSH/Perl/Kex/DH1.pm line 10, <GEN0> line 1.
  12. Compilation failed in require at H:/TASKS/TOOLS/Perl/lib/Net/SSH/Perl/Kex.pm line 6, <GEN0> line 1.
  13. BEGIN failed--compilation aborted at H:/TASKS/TOOLS/Perl/lib/Net/SSH/Perl/Kex.pm line 6, <GEN0> line 1.
  14. Compilation failed in require at H:/TASKS/TOOLS/Perl/lib/Net/SSH/Perl/SSH2.pm line 6, <GEN0> line 1.
  15. BEGIN failed--compilation aborted at H:/TASKS/TOOLS/Perl/lib/Net/SSH/Perl/SSH2.pm line 6, <GEN0> line 1.
  16. Compilation failed in require at H:/TASKS/TOOLS/Perl/lib/Net/SSH/Perl.pm line 52, <GEN0> line 1.


 
Bizarre car j'ai bien le fichier Pari.pm dans le dossier Perl\lib\Math.
J'ouvre le fichier Pari.pm, et, diable, voilà qui est bien bizarre :  
http://cpansearch.perl.org/src/ILY [...] 09/Pari.pm
 
Du coup je me dis qu'il y a eu une erreur lors de l'installation du package, je regarde le ppm4.log et j'obtiens les erreurs suivantes :

Code :
  1. 2011-04-04T11:08:15 <7> [InstallArea.pm:454] unlink C:/TEMP/perl------------please-run-the-install-script------------/site/etc/ppm-site-dirty
  2. 2011-04-04T11:08:16 <4> [ppm:13] cannot unlink file for C:\Temp\ppm-QvI3Io\Net-SSH-Perl-1.23\blib\html\site\lib\Net\SSH\Perl.html: Permission denied at H:/TASKS/TOOLS/Perl/lib/ActivePerl/PPM/Client.pm line 1307
  3. 2011-04-04T11:08:16 <4> [ppm:13] cannot remove directory for C:\Temp\ppm-QvI3Io\Net-SSH-Perl-1.23\blib\html\site\lib\Net\SSH: Directory not empty at H:/TASKS/TOOLS/Perl/lib/ActivePerl/PPM/Client.pm line 1307
  4. 2011-04-04T11:08:16 <4> [ppm:13] cannot remove directory for C:\Temp\ppm-QvI3Io\Net-SSH-Perl-1.23\blib\html\site\lib\Net: Directory not empty at H:/TASKS/TOOLS/Perl/lib/ActivePerl/PPM/Client.pm line 1307
  5. 2011-04-04T11:08:16 <4> [ppm:13] cannot remove directory for C:\Temp\ppm-QvI3Io\Net-SSH-Perl-1.23\blib\html\site\lib: Directory not empty at H:/TASKS/TOOLS/Perl/lib/ActivePerl/PPM/Client.pm line 1307
  6. 2011-04-04T11:08:16 <4> [ppm:13] cannot remove directory for C:\Temp\ppm-QvI3Io\Net-SSH-Perl-1.23\blib\html\site: Directory not empty at H:/TASKS/TOOLS/Perl/lib/ActivePerl/PPM/Client.pm line 1307
  7. 2011-04-04T11:08:16 <4> [ppm:13] cannot remove directory for C:\Temp\ppm-QvI3Io\Net-SSH-Perl-1.23\blib\html: Directory not empty at H:/TASKS/TOOLS/Perl/lib/ActivePerl/PPM/Client.pm line 1307
  8. 2011-04-04T11:08:16 <4> [ppm:13] cannot remove directory for C:\Temp\ppm-QvI3Io\Net-SSH-Perl-1.23\blib: Directory not empty at H:/TASKS/TOOLS/Perl/lib/ActivePerl/PPM/Client.pm line 1307
  9. 2011-04-04T11:08:16 <4> [ppm:13] cannot remove directory for C:\Temp\ppm-QvI3Io\Net-SSH-Perl-1.23: Directory not empty at H:/TASKS/TOOLS/Perl/lib/ActivePerl/PPM/Client.pm line 1307
  10. 2011-04-04T11:08:16 <4> [ppm:13] cannot remove directory for C:\Temp\ppm-QvI3Io: Directory not empty at H:/TASKS/TOOLS/Perl/lib/ActivePerl/PPM/Client.pm line 1307


 
J'ai essayé de recompiler Pari sans succès :

Code :
  1. C:\Documents and Settings\mageni>perl "C:\Documents and Settings\mageni\Desk
  2. top\Math-Pari-2.01080604\Makefile.PL" paridir="C:\Documents and Settings\mageni\Desktop\pari-2.3.0"
  3. Set up gcc environment - 3.4.5 (mingw-vista special r3)
  4. Setting up Math::Pari with Perl 5.012003 on MSWin32 version 5.2;
  5.    cc=H:/TASKS/TOOLS/Perl/site/bin/gcc.exe, gccversion=3.4.5 (mingw-vista specia
  6. l r3), cccdlflags=' ',
  7.    ccflags='-DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DUSE_SITE
  8. CUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -D_USE_32BIT_
  9. TIME_T -DPERL_MSVCRT_READFIX -DHASATTRIBUTE -fno-strict-aliasing -mms-bitfields'
  10. ,
  11.    optimize='-O2',
  12.    ld=H:\TASKS\TOOLS\Perl\site\bin\g++.exe, ldflags='-L"C:\TEMP\perl------------
  13. please-run-the-install-script------------\lib\CORE"'.
  14. Found GP/PARI build directory in C:\Documents and Settings\rpallier\Desktop\pari
  15. -2.3.0
  16.      (integer-formatted version 2003000).
  17.   ### Math::Pari support of GP/PARI library version 2.3.* is not fully
  18.   ### finished.  For non-PS plotting functions, one must downgrade to 2.1.7.
  19.   ### Moreover, the test t/55_intnum.t takes significant time to complete.
  20. The system cannot find the path specified.
  21. Could not run test converter: No such file or directory 256 at H:/TASKS/TOOLS/Pe
  22. rl/lib/Math/PariBuild.pm line 627.


 
voilà où j'en suis, si quelqu'un pense savoir où j'ai mal géré, se sera avec joie que je recevrais les critiques :).


Message édité par mageni le 06-04-2011 à 11:38:59
Reply

Marsh Posté le 05-04-2011 à 08:54:49   

Reply

Marsh Posté le 05-04-2011 à 11:50:57    

Tu utilises le perl de ActiveState sous Windows?

 

Si oui, il ne faut pas utiliser ppm, mais cpan (ppm ne pose pas de questions interactives je crois tandis que cpan le fait)
1) vérifies sous ppm que tu as les dernières versions des modules CPAN ar CPANPLUS sinon, installes les  (et la dernière version du module yaml aussi tant qu'on y est)
2) lances cpan dans une fenetre DOS
3) laisses cpan installer sa version de mingw s'il le demande
4) quand cpan s'est initialise et a mis les bases a jour, tapes install Net::SSH::Perl (c'est sensible aux majuscules)
5) réponds aux deux dialogues (version du protocole et type de cryptage [choix des deux 3, et des 5 cryptages 1 2 3 4 5 en ce qui me concerne]
6) laisse les compils et installs des nombreux modules requis se faire se faire c'est long, je suis en train de le tester en te postant
7) quand c'est terminé, quittes en tapant quit
NOTE: sur ma machin, perl est plus rapide que le shell windows qui n'arrive pas a conférer les droits a certains  fichiers temporaires avant que perl ne veuille les utiliser.
Ça donne une erreur (en rouge) avec arret: Could not rename: Permission denied
C'est pas grave, il suffit de relancer en utilisant la flèche vers le haut du clavier (parfois faut relancer deux fois, mais ça finit par passer).
Bon j'ai largement eu le temps d'écrire ceci et il est toujours en train d'installer des modules, donc c'est pas un truc simple, ce module de cryptage, mais bon, il devrait finir par en venir à bout.
EDIT, c'est même très long, la ça fait bientôt une heure qu'il compile le module Crypt::DH
A+,


Message édité par gilou le 05-04-2011 à 12:41:47

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-04-2011 à 14:02:04    

Bon, je suis bloqué au même niveau:
La compil de Math::Pari qui est pas du tout prévue de se faire sur autre chose que unix apparement (le makefile tient a utiliser gcc au lieu de mingw etc)
Il faudrait voir ce qui a changé depuis la version qui marchait avec Perl 5.8 d'il y a un an et qu'on trouve ici: http://cpan.uwinnipeg.ca/dist/Math-Pari
A+,


Message édité par gilou le 05-04-2011 à 14:04:26

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-04-2011 à 14:33:43    

salut !
merci pour le temps consacré :)
Du coup je vais essayer de modifier le makefile pour qu'il utilise mingw.
Sinon je vais descendre d'un cran et passer en C avec libssh2.
Une version qui date de 1 an c'est surprenant !

Reply

Marsh Posté le 05-04-2011 à 16:49:46    

Bon,
J'ai très vite laissé tomber le makefile et ai cherché un autre moyen en C, mais par hasard je suis tombé sur un autre module Perl qui utilise libssh2 :  
Net::SSH2.
Pourquoi deux modules ?
Est-ce que celui-ci est moins "secure" ?
En tout cas via ppm j'ai pu l'installer, et il marche très bien :
 

Code :
  1. use strict;
  2. use warnings;
  3. use Net::SSH2;
  4. my $ssh2 = Net::SSH2->new();
  5. $ssh2->connect('machine_unix') or die "$! $?";
  6. if ($ssh2->auth_publickey('username', "chemin vers clef publique", "chemin vers clef privée" )) {
  7.   print "Connected";
  8.   my $chan = $ssh2->channel();
  9.   my $sftp = $ssh2->sftp();
  10.   my $fh = $sftp->open('/etc/passwd') or die;
  11.   print $_ while <$fh>;
  12. } else {
  13.     print "failed";
  14. }


Reply

Marsh Posté le 05-04-2011 à 22:46:44    

Oui, j'avais aussi pensé à ce module, mais je craignais qu'on retombe dans les mêmes problèmes. Tant mieux s'il marche lui sans problème.
La différence si j'ai bien compris: Net::SSH::Perl est une implémentation "pure perl" (mais vu comment il utilise des tonnes de modules externes qui lui ne le sont pas, euh...) tandis que Net::SSH2 est un wrapper évolué autour d'une librairie.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 06-04-2011 à 11:00:29    

Yep :),
 
bon, pour ceux qui voudraient exécuter une commande sur le poste, j'ai trouvé un bout de code tout simple (http://www.perlmonks.org/?node_id=621761):
(/!\ ne pas oublier d'enregistrer le .pl avec les sauts de ligne en type UNIX quand on veut attaquer une machine UNIX :) /!\)
 

Code :
  1. my $chan = $ssh2->channel();
  2. $chan->blocking(0);
  3. $chan->exec("ls /home/mageni\n" );
  4. print "$_" while <$chan>;


 
PS : on met résolu comment?
 
++

Reply

Marsh Posté le 06-04-2011 à 11:01:59    

On met résolu en éditant le titre de son premier post.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed