Bonjour,
je suis sous windows XP Pro
je voulais savoir si avec perl je pouvais lancer des scripts en shell unix sur un serveur distant.
Je veux savoir si c'est possible et si c'est le cas je me ferai un plaisir de rechercher moi-même.
Version imprimable
Bonjour,
je suis sous windows XP Pro
je voulais savoir si avec perl je pouvais lancer des scripts en shell unix sur un serveur distant.
Je veux savoir si c'est possible et si c'est le cas je me ferai un plaisir de rechercher moi-même.
Si ces scripts sont déjà sur ces serveurs, je te dirais donc que c'est possible.
Tu te connectes en ssh sur ces serveurs et lance les scripts.
Voilou
Oui les scripts sont déjà sur le serveur, je ne cherche qu'à les lancer.
Je vais rechercher ça et le dirai si je trouve comment faire.
Merci
Tu peux utiliser le module Net::SSH::Perl pour te connecter en ssh sur les serveurs.
Ensuite tu lances tes commandes.
voilou
Oui c'est ce que j'avais essayé de faire mais apparemment j'ai des problèmes car la fonction getpwuid n'a pas été implémentée
http://www.zotline.com/shownote.zot/NoteNum/3386.html
c'est bien ce qui me bloque.
je ne comprends pas ton probleme.
Le lien que tu donnes parles de perl 5.0 (tres tres vieux perl, plus d'actualités).
une fois connecté en ssh, je ne vois pas ce que t'arrive pas à faire!!
non le truc c'est que je ne peux pas me connecter en ssh car ce message d'erreur m'est retourné
"The getpwuid function is unimplemented at C:/Perl/site/lib/Net/SSH/Perl.pm line 110" lorsque je lance mon script dans l'invité de commande
j'avais installé activeperl 5.8.8
Ok, moi je l'utilise sous linux.
Je me demande s'il te faut pas installer cygwin, puis ssh pour pouvoir le tester
merci, je vais y réfléchir.
au final, je sais pas.
Je viens de tester sur un PC windows sur lequel ssh est installé via cygwin mais ça ne fonctionne pas
Regarde aussi Net::ssh2
C'est bon, j'ai pu me connecter en SSH sous windows sur un serveur linux.
Quand j'aurai terminé ce que j'ai à faire, j'expliquerai comment.
Ok, peut tu me mettre ton bout de code de test?
Quel module as tu utiliser?
sinon de windows à linux, j'y arrive aussi via net::ssh2, mais c pour qu'on puis comparer nos codes et le donner aux autres forumeurs
j'ai installé les modules
Math-BigInt
Math-BigInt-GMP
Math-Pari
en plus de Net::SSH et de Net::SSH::W32Perl
et j'ai supprimé "|| (getpwuid($>))[7]" à la ligne 110 dans le fichier c:/Perl/site/lib/net/SSH/Perl.pm
pour le code, c'est la syntaxe standard de création de l'objet.
EDIT: bon j'ai testé, c'est bon, je peux créer des répertoires, supprimer des fichiers,etcCode:
1
2
3
4
5
6 my $host = "XXXX"; my $user = "YYYY"; my $psswd = "ZZZZ"; my $ssh = Net::SSH::W32Perl->new( $host ); $ssh->login( $user , $psswd );
mais j'arrive pas à lancer un script XD
Ok, en gros, c'est du bourrin ton truc.
Il y a une façon plus propre de faire tout ça, je me mettrais dessus demain.
Car y a pas besoin de supprimer le code :mrgreen:
Purée ya un truc que je comprends pas.
Il me faut un package particulier ou une commande particulière pour pouvoir faire du "->cmd('/X/Y/Z.sh');" ????? c'est juste un shell à lancer mais ça fonctionne pas !!!
Bon, moi je te conseil de ne pas utiliser ce module :mrgreen:,
mais d'utiliser Net::SSH2.
1- Ce n'est pas bon de modifier le module comme tu l'as fait
2- C'est ensuite le bordel. et il date de 2002
3- Net::SSH::Perl fonctionne mieux sous linux
4- J'ai testé tous ces modules et au final j'arrive à faire ce que je veux sous windows (vers linux) avec Net::SSH2 et sous linux j'utilise Net::SSH::Perl
Donc Désinstalle le et install Net::SSH2. Garde ton code de Net::SSH::W32Perl de coté (on sait jamais) et je t'aiderais sur le ssh2, ok?
OK je vais faire un autre script en suivant tes instructions.
Je dirai si j'ai un problème. Merci
Je me suis pris la tête sur ce module, donc pour t'éviter de perdre du temps, je vais te donner une procédure que j'ai écrite qui fonctionne bien (car la doc du module à l'air simple mais le module a l'air capricieux).ça te convient :mrgreen:?
Principe de parcimonie (moindre effort) oblige, je serai vraiment bête de refuser une telle proposition :mrgreen:
merci:yaisse2:
Bon, je suis de bonne humeur, alors profite en :aie: :mrgreen:.
La procédure que j'ai crée permet de faire un ssh de windows sur un serveur (linux car c'est le test que moi j'ai effectué), ça se trouve, il fonctionnera bien de windows à windows, pas testé.
On lui donne en argument la référence d'un hash dans lequel on lui donne le nécessaire pour se connecter.
Dans ce hash, on peut lui mettre l'ensemble des commandes qu'on souhaite exécuter sur le serveur dans un tableau anonyme.
Et on le lance. Pour récupérer la sortie standard, faudra mettre verbose à 1 dans le hash, sinon il exécute les commandes mais ne récupère pas la sortie standard (le STDOUT).
Le seul hic, et tu pourras peut être chercher pour moi, c'est qu'en cas de mauvaises connexion ou mauvais login, host, etc, le module ne me prévient pas et ne fait rien (ce qui est dommage), j'attends donc ta solution (faut quand même bosser un peu ;))
Voilà le code exemple :
Pour les détails, voir les cours et tutoriels de formation pour apprendre la programmation Perl : http://perl.developpez.com/cours/Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 #!/usr/bin/perl use strict; use warnings; my ($host, $login, $password) = ("SERVEUR", "root", "PASSWD"); my %InfoSSH = ( host => $host, login => $login, password => $password, cmd => ["cat /etc/passwd", "pwd", "ls -alh", # "/var/www/test/test.sh", "mkdir -p toto", ], verbose => 1, # To get the stdout ); print CommandSSH( \%InfoSSH ); #================================================================== # But : Connection SSH + commandes # Args : # Retourne : rien ou le stdout # Besoin : modules Net::SSH2 sous win # Net::SSH::Perl sous linux #================================================================= sub CommandSSH { my ( $RefDataConnection ) = @_; # parameters my ($host, $login, $password, $Refcmd, $verbose) = ( $RefDataConnection->{host}, $RefDataConnection->{login}, $RefDataConnection->{password}, $RefDataConnection->{cmd}, $RefDataConnection->{verbose}, ); my $OS = $^O; my $STDOUT; # Linux if ( $OS eq "linux" ) { # A faire } # Windows elsif ( $OS =~ /^mswin32$/i ) { require Net::SSH2; my $ssh2 = Net::SSH2->new(); $ssh2->connect($host) or die "Unable to connect to $host, $! $@ \n"; $ssh2->auth_password($login, $password) or die "Unable to login $! \n"; foreach my $cmd ( @{$Refcmd} ) { my $channel = $ssh2->channel(); $channel->blocking(1); $channel->exec($cmd); while( $channel->read(my $buffer, 1024) ) { if ( defined $verbose and $verbose == 1 ) { $STDOUT .= $buffer; } } $channel->close; } } if (defined $verbose) { return $STDOUT; } return; }