je m'embrouille les pinceaux avec le module Net::SSH2
Je dois me connecter sur une machine distante (bien sûr...), sur un port
spécifique, avec un login et un mot de passe.
Jusque là, pas de problème.
J'ai un soucis avec l'exécution de commandes:
#==========================================================
#!/usr/bin/perl -w
use strict;
use Net::SSH2;
my $destination="127.0.0.1";
my $port=4444;
my $login="MyLogin";
my $password="MyPassword";
my $ssh2 = Net::SSH2->new();
unless ($ssh2->connect($destination, $port)){
print "Impossible de se connecter $!\n";
exit 1;
}
if ($ssh2->auth_password($login,$password)) {
my $chan = $ssh2->channel();
print "Lancement de LS\n";
$chan->exec('ls');
print $_ while (<$chan>);
print "Lancement de LS ... Terminé\n";
}
$ssh2->disconnect();
exit;
#=============================================================
J'obtiens:
Lancement de LS
Lancement de LS ... Terminé
et rien entre les 2.
Comment faire pour lancer une série de commandes quelconque et récupérer
chaque STDOUT, et éventuellement chaque STDERR.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Sébastien Cottalorda
Salut tout le monde,
je m'embrouille les pinceaux avec le module Net::SSH2
Je dois me connecter sur une machine distante (bien sûr...), sur un port spécifique, avec un login et un mot de passe. Jusque là, pas de problème.
J'ai un soucis avec l'exécution de commandes: #========================================================= > #!/usr/bin/perl -w use strict; use Net::SSH2;
my $destination="127.0.0.1"; my $portD44; my $login="MyLogin"; my $password="MyPassword"; my $ssh2 = Net::SSH2->new();
unless ($ssh2->connect($destination, $port)){ print "Impossible de se connecter $!n"; exit 1; }
if ($ssh2->auth_password($login,$password)) { my $chan = $ssh2->channel(); print "Lancement de LSn"; $chan->exec('ls'); print $_ while (<$chan>); print "Lancement de LS ... Terminén"; } $ssh2->disconnect(); exit; #============================================================ > J'obtiens: Lancement de LS Lancement de LS ... Terminé
et rien entre les 2.
Comment faire pour lancer une série de commandes quelconque et récupérer chaque STDOUT, et éventuellement chaque STDERR.
Merci d'avance pour toutre aide.
Sébastien Finalement, j'ai utilisé Net::SSH::Perl qui fonctionne parfaitement.
Je pensais qu'il fallait que je m'oriente vers Net::SSH2 car je cite l'auteur : "The Net::SSH::Perl modules are showing signs of age; with the requirement to be compatible with SSH versions 1 and 2, support of newer features such as channels is difficult; it also has many dependencies, some of which are hard to build (e.g. Math::Pari). (Net::SSH is just a wrapper around the ssh binaries, and never should have got the namespace.) Net::SSH2 is a new start, with few dependencies and all the functionality of the SSH protocol, version 2, at your disposal."
Bref, pourquoi changer une équipe qui gagne..... Sébastien
Salut tout le monde,
je m'embrouille les pinceaux avec le module Net::SSH2
Je dois me connecter sur une machine distante (bien sûr...), sur un port
spécifique, avec un login et un mot de passe.
Jusque là, pas de problème.
J'ai un soucis avec l'exécution de commandes:
#========================================================= > #!/usr/bin/perl -w
use strict;
use Net::SSH2;
my $destination="127.0.0.1";
my $portD44;
my $login="MyLogin";
my $password="MyPassword";
my $ssh2 = Net::SSH2->new();
unless ($ssh2->connect($destination, $port)){
print "Impossible de se connecter $!n";
exit 1;
}
if ($ssh2->auth_password($login,$password)) {
my $chan = $ssh2->channel();
print "Lancement de LSn";
$chan->exec('ls');
print $_ while (<$chan>);
print "Lancement de LS ... Terminén";
}
$ssh2->disconnect();
exit;
#============================================================ >
J'obtiens:
Lancement de LS
Lancement de LS ... Terminé
et rien entre les 2.
Comment faire pour lancer une série de commandes quelconque et récupérer
chaque STDOUT, et éventuellement chaque STDERR.
Merci d'avance pour toutre aide.
Sébastien
Finalement, j'ai utilisé Net::SSH::Perl qui fonctionne parfaitement.
Je pensais qu'il fallait que je m'oriente vers Net::SSH2 car je cite
l'auteur :
"The Net::SSH::Perl modules are showing signs of age; with the requirement
to be compatible with SSH versions 1 and 2, support of newer features such
as channels is difficult; it also has many dependencies, some of which
are hard to build (e.g. Math::Pari). (Net::SSH is just a wrapper around the
ssh binaries, and never should have got the namespace.) Net::SSH2 is a
new start, with few dependencies and all the functionality of the SSH
protocol, version 2, at your disposal."
Bref, pourquoi changer une équipe qui gagne.....
Sébastien
je m'embrouille les pinceaux avec le module Net::SSH2
Je dois me connecter sur une machine distante (bien sûr...), sur un port spécifique, avec un login et un mot de passe. Jusque là, pas de problème.
J'ai un soucis avec l'exécution de commandes: #========================================================= > #!/usr/bin/perl -w use strict; use Net::SSH2;
my $destination="127.0.0.1"; my $portD44; my $login="MyLogin"; my $password="MyPassword"; my $ssh2 = Net::SSH2->new();
unless ($ssh2->connect($destination, $port)){ print "Impossible de se connecter $!n"; exit 1; }
if ($ssh2->auth_password($login,$password)) { my $chan = $ssh2->channel(); print "Lancement de LSn"; $chan->exec('ls'); print $_ while (<$chan>); print "Lancement de LS ... Terminén"; } $ssh2->disconnect(); exit; #============================================================ > J'obtiens: Lancement de LS Lancement de LS ... Terminé
et rien entre les 2.
Comment faire pour lancer une série de commandes quelconque et récupérer chaque STDOUT, et éventuellement chaque STDERR.
Merci d'avance pour toutre aide.
Sébastien Finalement, j'ai utilisé Net::SSH::Perl qui fonctionne parfaitement.
Je pensais qu'il fallait que je m'oriente vers Net::SSH2 car je cite l'auteur : "The Net::SSH::Perl modules are showing signs of age; with the requirement to be compatible with SSH versions 1 and 2, support of newer features such as channels is difficult; it also has many dependencies, some of which are hard to build (e.g. Math::Pari). (Net::SSH is just a wrapper around the ssh binaries, and never should have got the namespace.) Net::SSH2 is a new start, with few dependencies and all the functionality of the SSH protocol, version 2, at your disposal."
Bref, pourquoi changer une équipe qui gagne..... Sébastien
Denis
Bonjour,
Au moins pendant le dev, il est souvent utile de passer par "use strict" et "use warning" au début du script.
my $chan = $ssh2->channel(); print "Lancement de LSn"; $chan->exec('ls'); print $_ while (<$chan>);
Je cite la documentation : ""channel ( [type, [window size, [packet size]]] ) Creates and returns a new channel object.""
Je ne comprends pas pourquoi l'utiliser comme un file handle la doc de l'objet ne le prévoit pas (http://search.cpan.org/~dbrobins/Net-SSH2-0.08/lib/Net/SSH2/Channel.pm).
Comment faire pour lancer une série de commandes quelconque et récup érer chaque STDOUT, et éventuellement chaque STDERR.
Le bon moyen a été trouvé je crois en passant par un module plus simple :)
Bonne continuation,
-- Denis
Bonjour,
Au moins pendant le dev, il est souvent utile de passer par "use
strict" et "use warning" au début du script.
my $chan = $ssh2->channel();
print "Lancement de LSn";
$chan->exec('ls');
print $_ while (<$chan>);
Je cite la documentation :
""channel ( [type, [window size, [packet size]]] )
Creates and returns a new channel object.""
Je ne comprends pas pourquoi l'utiliser comme un file handle la doc de
l'objet ne le prévoit pas
(http://search.cpan.org/~dbrobins/Net-SSH2-0.08/lib/Net/SSH2/Channel.pm).
Comment faire pour lancer une série de commandes quelconque et récup érer
chaque STDOUT, et éventuellement chaque STDERR.
Le bon moyen a été trouvé je crois en passant par un module plus
simple :)
Au moins pendant le dev, il est souvent utile de passer par "use strict" et "use warning" au début du script.
my $chan = $ssh2->channel(); print "Lancement de LSn"; $chan->exec('ls'); print $_ while (<$chan>);
Je cite la documentation : ""channel ( [type, [window size, [packet size]]] ) Creates and returns a new channel object.""
Je ne comprends pas pourquoi l'utiliser comme un file handle la doc de l'objet ne le prévoit pas (http://search.cpan.org/~dbrobins/Net-SSH2-0.08/lib/Net/SSH2/Channel.pm).
Comment faire pour lancer une série de commandes quelconque et récup érer chaque STDOUT, et éventuellement chaque STDERR.
Le bon moyen a été trouvé je crois en passant par un module plus simple :)
Bonne continuation,
-- Denis
Paul Gaborit
À (at) 18 Sep 2006 06:17:21 -0700, "Denis" écrivait (wrote):
Au moins pendant le dev, il est souvent utile de passer par "use strict" et "use warning" au début du script.
my $chan = $ssh2->channel(); print "Lancement de LSn"; $chan->exec('ls'); print $_ while (<$chan>);
Je cite la documentation : ""channel ( [type, [window size, [packet size]]] ) Creates and returns a new channel object.""
Je ne comprends pas pourquoi l'utiliser comme un file handle la doc de l'objet ne le prévoit pas (http://search.cpan.org/~dbrobins/Net-SSH2-0.08/lib/Net/SSH2/Channel.pm).
Et pourtant si. Petit extrait de la doc :
A channel object is created by the Net::SSH2 channel method. As well as being an object, it is also a *tied* *filehandle*...
Comment faire pour lancer une série de commandes quelconque et récupérer chaque STDOUT, et éventuellement chaque STDERR.
Le bon moyen a été trouvé je crois en passant par un module plus simple :)
...ou alors il fallait tester la méthode 'read' (avec le troisième argument optionnel pour lire STDERR) ou la méthode 'poll' (celle de Net::SSH2) pour vérifier la présence de données à lire.
On peut aussi utiliser 'ext_data' pour fusionner STDERR et STDOUT ou tout simplement pour ignorer STDERR.
PS: ce qui m'étonne, c'est la possibilité *d'écrire* sur STDERR via 'write' (avec le deuxième argument optionnel)... Qui reçoit ce flux ?
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Au moins pendant le dev, il est souvent utile de passer par "use
strict" et "use warning" au début du script.
my $chan = $ssh2->channel();
print "Lancement de LSn";
$chan->exec('ls');
print $_ while (<$chan>);
Je cite la documentation :
""channel ( [type, [window size, [packet size]]] )
Creates and returns a new channel object.""
Je ne comprends pas pourquoi l'utiliser comme un file handle la doc de
l'objet ne le prévoit pas
(http://search.cpan.org/~dbrobins/Net-SSH2-0.08/lib/Net/SSH2/Channel.pm).
Et pourtant si. Petit extrait de la doc :
A channel object is created by the Net::SSH2 channel method. As
well as being an object, it is also a *tied* *filehandle*...
Comment faire pour lancer une série de commandes quelconque et récupérer
chaque STDOUT, et éventuellement chaque STDERR.
Le bon moyen a été trouvé je crois en passant par un module plus
simple :)
...ou alors il fallait tester la méthode 'read' (avec le troisième
argument optionnel pour lire STDERR) ou la méthode 'poll' (celle de
Net::SSH2) pour vérifier la présence de données à lire.
On peut aussi utiliser 'ext_data' pour fusionner STDERR et STDOUT ou
tout simplement pour ignorer STDERR.
PS: ce qui m'étonne, c'est la possibilité *d'écrire* sur STDERR via
'write' (avec le deuxième argument optionnel)... Qui reçoit ce flux ?
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 18 Sep 2006 06:17:21 -0700, "Denis" écrivait (wrote):
Au moins pendant le dev, il est souvent utile de passer par "use strict" et "use warning" au début du script.
my $chan = $ssh2->channel(); print "Lancement de LSn"; $chan->exec('ls'); print $_ while (<$chan>);
Je cite la documentation : ""channel ( [type, [window size, [packet size]]] ) Creates and returns a new channel object.""
Je ne comprends pas pourquoi l'utiliser comme un file handle la doc de l'objet ne le prévoit pas (http://search.cpan.org/~dbrobins/Net-SSH2-0.08/lib/Net/SSH2/Channel.pm).
Et pourtant si. Petit extrait de la doc :
A channel object is created by the Net::SSH2 channel method. As well as being an object, it is also a *tied* *filehandle*...
Comment faire pour lancer une série de commandes quelconque et récupérer chaque STDOUT, et éventuellement chaque STDERR.
Le bon moyen a été trouvé je crois en passant par un module plus simple :)
...ou alors il fallait tester la méthode 'read' (avec le troisième argument optionnel pour lire STDERR) ou la méthode 'poll' (celle de Net::SSH2) pour vérifier la présence de données à lire.
On peut aussi utiliser 'ext_data' pour fusionner STDERR et STDOUT ou tout simplement pour ignorer STDERR.
PS: ce qui m'étonne, c'est la possibilité *d'écrire* sur STDERR via 'write' (avec le deuxième argument optionnel)... Qui reçoit ce flux ?
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Sébastien Cottalorda
À (at) 18 Sep 2006 06:17:21 -0700, "Denis" écrivait (wrote):
Au moins pendant le dev, il est souvent utile de passer par "use strict" et "use warning" au début du script.
my $chan = $ssh2->channel(); print "Lancement de LSn"; $chan->exec('ls'); print $_ while (<$chan>);
Je cite la documentation : ""channel ( [type, [window size, [packet size]]] ) Creates and returns a new channel object.""
Je ne comprends pas pourquoi l'utiliser comme un file handle la doc de l'objet ne le prévoit pas (http://search.cpan.org/~dbrobins/Net-SSH2-0.08/lib/Net/SSH2/Channel.pm).
Et pourtant si. Petit extrait de la doc :
A channel object is created by the Net::SSH2 channel method. As well as being an object, it is also a *tied* *filehandle*...
C'est pourtant bien ce que j'avais compris, mais je pensais que l'utilisation était plus simple : Je n'avais pas fait attention au poll + read.
Comment faire pour lancer une série de commandes quelconque et récupérer chaque STDOUT, et éventuellement chaque STDERR.
Le bon moyen a été trouvé je crois en passant par un module plus simple :)
...ou alors il fallait tester la méthode 'read' (avec le troisième argument optionnel pour lire STDERR) ou la méthode 'poll' (celle de Net::SSH2) pour vérifier la présence de données à lire.
On peut aussi utiliser 'ext_data' pour fusionner STDERR et STDOUT ou tout simplement pour ignorer STDERR.
PS: ce qui m'étonne, c'est la possibilité *d'écrire* sur STDERR via 'write' (avec le deuxième argument optionnel)... Qui reçoit ce flux ?
Au moins pendant le dev, il est souvent utile de passer par "use
strict" et "use warning" au début du script.
my $chan = $ssh2->channel();
print "Lancement de LSn";
$chan->exec('ls');
print $_ while (<$chan>);
Je cite la documentation :
""channel ( [type, [window size, [packet size]]] )
Creates and returns a new channel object.""
Je ne comprends pas pourquoi l'utiliser comme un file handle la doc de
l'objet ne le prévoit pas
(http://search.cpan.org/~dbrobins/Net-SSH2-0.08/lib/Net/SSH2/Channel.pm).
Et pourtant si. Petit extrait de la doc :
A channel object is created by the Net::SSH2 channel method. As
well as being an object, it is also a *tied* *filehandle*...
C'est pourtant bien ce que j'avais compris, mais je pensais que
l'utilisation était plus simple : Je n'avais pas fait attention au poll
+ read.
Comment faire pour lancer une série de commandes quelconque et récupérer
chaque STDOUT, et éventuellement chaque STDERR.
Le bon moyen a été trouvé je crois en passant par un module plus
simple :)
...ou alors il fallait tester la méthode 'read' (avec le troisième
argument optionnel pour lire STDERR) ou la méthode 'poll' (celle de
Net::SSH2) pour vérifier la présence de données à lire.
On peut aussi utiliser 'ext_data' pour fusionner STDERR et STDOUT ou
tout simplement pour ignorer STDERR.
PS: ce qui m'étonne, c'est la possibilité *d'écrire* sur STDERR via
'write' (avec le deuxième argument optionnel)... Qui reçoit ce flux ?
À (at) 18 Sep 2006 06:17:21 -0700, "Denis" écrivait (wrote):
Au moins pendant le dev, il est souvent utile de passer par "use strict" et "use warning" au début du script.
my $chan = $ssh2->channel(); print "Lancement de LSn"; $chan->exec('ls'); print $_ while (<$chan>);
Je cite la documentation : ""channel ( [type, [window size, [packet size]]] ) Creates and returns a new channel object.""
Je ne comprends pas pourquoi l'utiliser comme un file handle la doc de l'objet ne le prévoit pas (http://search.cpan.org/~dbrobins/Net-SSH2-0.08/lib/Net/SSH2/Channel.pm).
Et pourtant si. Petit extrait de la doc :
A channel object is created by the Net::SSH2 channel method. As well as being an object, it is also a *tied* *filehandle*...
C'est pourtant bien ce que j'avais compris, mais je pensais que l'utilisation était plus simple : Je n'avais pas fait attention au poll + read.
Comment faire pour lancer une série de commandes quelconque et récupérer chaque STDOUT, et éventuellement chaque STDERR.
Le bon moyen a été trouvé je crois en passant par un module plus simple :)
...ou alors il fallait tester la méthode 'read' (avec le troisième argument optionnel pour lire STDERR) ou la méthode 'poll' (celle de Net::SSH2) pour vérifier la présence de données à lire.
On peut aussi utiliser 'ext_data' pour fusionner STDERR et STDOUT ou tout simplement pour ignorer STDERR.
PS: ce qui m'étonne, c'est la possibilité *d'écrire* sur STDERR via 'write' (avec le deuxième argument optionnel)... Qui reçoit ce flux ?
OK, mais cela ressemble plus à une usine à gaz... Les primitives sont vraiment primitives ..... :-)
C'est ce qui permet de gérer finement les choses (plusieurs connexions simultanées, gestion d'une interface en parallèle, etc.) sans passer obligatoirement par du multiprocess ou du multithreads.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
OK, mais cela ressemble plus à une usine à gaz...
Les primitives sont vraiment primitives ..... :-)
C'est ce qui permet de gérer finement les choses (plusieurs connexions
simultanées, gestion d'une interface en parallèle, etc.) sans passer
obligatoirement par du multiprocess ou du multithreads.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
OK, mais cela ressemble plus à une usine à gaz... Les primitives sont vraiment primitives ..... :-)
C'est ce qui permet de gérer finement les choses (plusieurs connexions simultanées, gestion d'une interface en parallèle, etc.) sans passer obligatoirement par du multiprocess ou du multithreads.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
OK, mais cela ressemble plus à une usine à gaz... Les primitives sont vraiment primitives ..... :-)
C'est ce qui permet de gérer finement les choses (plusieurs connexions simultanées, gestion d'une interface en parallèle, etc.) sans passer obligatoirement par du multiprocess ou du multithreads.
Je comprends bien, mais, pour un néophite, ces primitives peuvent être
difficiles à manipuler.
Il aurait été nettement plus judicieux,de proposer, en plus, des "macros" permettant de gérer simplement ce que j'essayais de faire: Envoi d'une commande Réception du résultat sous forme de stderr,stdin et exit_code
comme le fait si bien Net::SSH::Perl gràce à la commande : my($stdout, $stderr, $exitcode) = $ssh->cmd($commande_a_executer);
OK, mais cela ressemble plus à une usine à gaz...
Les primitives sont vraiment primitives ..... :-)
C'est ce qui permet de gérer finement les choses (plusieurs connexions
simultanées, gestion d'une interface en parallèle, etc.) sans passer
obligatoirement par du multiprocess ou du multithreads.
Je comprends bien, mais, pour un néophite, ces primitives peuvent être
difficiles à manipuler.
Il aurait été nettement plus judicieux,de proposer, en plus, des
"macros" permettant de gérer simplement ce que j'essayais de faire:
Envoi d'une commande
Réception du résultat sous forme de stderr,stdin et exit_code
comme le fait si bien Net::SSH::Perl gràce à la commande :
my($stdout, $stderr, $exitcode) = $ssh->cmd($commande_a_executer);
OK, mais cela ressemble plus à une usine à gaz... Les primitives sont vraiment primitives ..... :-)
C'est ce qui permet de gérer finement les choses (plusieurs connexions simultanées, gestion d'une interface en parallèle, etc.) sans passer obligatoirement par du multiprocess ou du multithreads.
Je comprends bien, mais, pour un néophite, ces primitives peuvent être
difficiles à manipuler.
Il aurait été nettement plus judicieux,de proposer, en plus, des "macros" permettant de gérer simplement ce que j'essayais de faire: Envoi d'une commande Réception du résultat sous forme de stderr,stdin et exit_code
comme le fait si bien Net::SSH::Perl gràce à la commande : my($stdout, $stderr, $exitcode) = $ssh->cmd($commande_a_executer);
Il aurait été nettement plus judicieux,de proposer, en plus, des "macros" permettant de gérer simplement ce que j'essayais de faire: Envoi d'une commande Réception du résultat sous forme de stderr,stdin et exit_code comme le fait si bien Net::SSH::Perl gràce à la commande : my($stdout, $stderr, $exitcode) = $ssh->cmd($commande_a_executer);
C'est vrai. Mais il faut être indulgent. Le module Net::SSH2 n'en est qu'à la version 0.08 ! Et comme Net::SSH::Perl et Net::SSH2 ont le même auteur, on peut en déduire qu'un jour, ils seront au même niveau de fonctionnalités...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Il aurait été nettement plus judicieux,de proposer, en plus, des
"macros" permettant de gérer simplement ce que j'essayais de faire:
Envoi d'une commande
Réception du résultat sous forme de stderr,stdin et exit_code
comme le fait si bien Net::SSH::Perl gràce à la commande :
my($stdout, $stderr, $exitcode) = $ssh->cmd($commande_a_executer);
C'est vrai. Mais il faut être indulgent. Le module Net::SSH2 n'en est
qu'à la version 0.08 ! Et comme Net::SSH::Perl et Net::SSH2 ont le
même auteur, on peut en déduire qu'un jour, ils seront au même niveau
de fonctionnalités...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
Il aurait été nettement plus judicieux,de proposer, en plus, des "macros" permettant de gérer simplement ce que j'essayais de faire: Envoi d'une commande Réception du résultat sous forme de stderr,stdin et exit_code comme le fait si bien Net::SSH::Perl gràce à la commande : my($stdout, $stderr, $exitcode) = $ssh->cmd($commande_a_executer);
C'est vrai. Mais il faut être indulgent. Le module Net::SSH2 n'en est qu'à la version 0.08 ! Et comme Net::SSH::Perl et Net::SSH2 ont le même auteur, on peut en déduire qu'un jour, ils seront au même niveau de fonctionnalités...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>