Ok merci je vais regarder ça !!!
j'étais en train d'utiliser le module Net::SSH2
Version imprimable
Ok merci je vais regarder ça !!!
j'étais en train d'utiliser le module Net::SSH2
Salut, j'ai testé ton programme et je me connecte bien en ssh au serveur désiré.
L'inconvénient c'est que de la même façon qu'en utilisant le module Net::SSH2 je peux faire des chmod, mkdir, etc à la c... mais je n'arrive tout bonnement pas à lancer un .sh ou un .pl, ça me rend fou car je ne comprend pas pourquoi.
C'est idiot car il n'y a que ça qui me bloque. En tout cas merci d'avoir passé du temps à écrire ton script, mais à résultat égal je préfère utiliser le module Net::SSH2 comme tu le préconisais au début. J'espère que tu comprends !!!
question bete pour lancer ton .pl as tu essayer de faire un "perl /path/script.pl" ?
et si non quel commande as-tu tapé ?
je fais tout bêtement :
je précise que je n'ai rien dans l'erreur standard, simplement que le script ne s'est pas exécuté, car dans script.pl je supprime un fichier .txt afin de voir rapidement si le script a bien été exécuté or ce dernier n'est pas supprimé.Citation:
my $chan = $ssh2->channel();
my $program = 'perl /path/script.pl';
$chan->exec( $program ) or print STDERR "Impossible de lancer $program\n";
C'est peut-être idiot mais est-ce que j'ai à modifier la variable $ENV{PATH} si j'exécute des scripts sur un autre serveur ?
Je ne vois pas d'où vient ton problème car avec le script que je t'ai envoyé, j'exécute bien des scripts perl, sh ou autre à distant
Lorsque j'exécute ton script j'obtiens les sorties standards de mon .pl mais pas de mon .sh, pourtant les rm de mes scripts ne s'exécutent pas.
mais je présume que lorsque tu écris :
Net::SSH::.Perl sous linux me permet d'interpréter les commandes de mon script perl sous windows ?!Citation:
# Besoin : modules Net::SSH2 sous win
# Net::SSH::.Perl sous linux
pourtant les chmod et co. fonctionnent très bien !!!
ça vient peut-être du serveur sur lequel je veux bosser.
non, rien à voir, j'ai mis ce commentaire car je voulais que ma procédure puisse être utilisée sous linux, et pour cela, rajouter du code, ce qui est pas encore le cas pour l'instant
Comment lance tu ton script sh? est il executable?
ah ok
mon script .sh, je le lance comme ça en utilisant Net::SSH2:
tout bêtementCitation:
my $chan = $ssh2->channel();
my $program = '/path/script.sh';
$chan->exec( $program ) or print STDERR "Impossible de lancer $program\n";
et dans ton script je fais juste
en ayant pris soin de modifier host, login, etc.Citation:
...
cmd => [ '/path/script.sh'
],
...
bah bizarre car moi j'ai pas de souci sur un script sh
test.sh
Code:
1
2
3
4
5 #!/bin/sh echo "test " echo "" echo "bonjour"
Super ça marche !!!!
en fait ça vient de mes scripts sur le serveur, il faut que je précise les chemins d'accès absolu des fichiers que je dois traiter alors qu'ils étaient traités en local dans le repertoire courant !!!! c'était tout bête en fait
ouf je suis soulagé, je vais testé sur les connexions SSH avec le module Net::SSH2 mais j'ai déjà ton script qui marche !!!
je considère que c'est résolu, merci djibrill
Voilà avec le module Net::SSH2 ça fonctionne aussi impeccablement, je vais donc l'utiliser et essayer d'améliorer tout ça.
Moralité : mettre dans les scripts uniquement des chemins absolu pour éviter les pépins :mrgreen: :yaisse2:
c'est bien'o.
Oublie pas de mettre ton thread en résolu
Bonjour,
Je me permets de remonter le sujet car il correspond à un de mes besoins de me connecter en SSH à un Switch Cisco Catalyst.
Le code que tu as mis djibril semble fonctionner, mais il me fait une erreur :
Ceci vient de ce bout de code :Citation:
Can't call method "blocking" on an undefined value at test8.pl line 46
Il se trouve qu'il n'accepte pas qu'on ouvre et ferme un channel dans la boucle foreach. Lorsque je sors le $ssh2->channel (avant) et $channel->close (après), le script marche bien, mais je ne peux lancer qu'une commande vu qu'il n'y a qu'un seul channel d'ouvert.Code:
1
2
3
4
5
6
7
8
9
10
11 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; }
Une idée par rapport à ce problème?
J'ai essayé de déclarer $channel avant la boucle, puis d'ouvrir le channel dans la boucle mais ça fait la même chose.
Merci d'avance pour votre aide !
Normalement, non. T'as essayé simple avec un ls -la par exemple ?
Et tente avec le debug, ça donne des idées.