2009-07-28 5 views
1

Je veux écrire un script Perl qui ssh dans un hôte distant, demande un mot de passe avant d'exécuter certaines commandes sur l'hôte distant et analyser la sortie dans le script Perl local. De l'aide ou des conseils à ce sujet? Merci!Comment puis-je ssh dans un hôte distant avec Perl?

+0

Vous pouvez mieux utiliser 'expect' –

+0

Expect.pm http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod – g33kz0r

Répondre

6

Il est Net-SSH-Perl
Certains notes sur usage.


Si vous découragez avec le module et ont besoin d'un moyen facile,
vous pourriez appeler directement SSH sur la coque.

perl -e {`ssh [email protected] "command"`} 

devrait fonctionner ...


J'espère que vous avez l'intention de laisser le SSH utiliser ses mots de passe et non mettre en œuvre la « sécurité » certains vous.
Pourrait également envisager public key authentication.

+0

J'ai essayé d'utiliser Net-SSH-Perl en premier. J'ai continué à courir dans nom d'hôte: Connexion établie. nom_hôte: Initialisation d'échange de clé envoyée (KEXINIT), attente de réponse. Aucune correspondance trouvée: client zlib server none, zlib @ openssh.com at /.../perl/5.6.1/Net/SSH/Perl/SSH2.pm ligne 87 Avant que je puisse comprendre cela, votre deuxième option travaillé pour moi et oui, il demande le mot de passe avant d'entrer dans le cmd (comme je le voulais). Merci pour l'aide! Enfin, apprendre comment je pourrais contourner l'erreur du serveur zlib satisferait ma curiosité :) –

+1

@Iceman Il semble que le client souhaite utiliser la compression, et le serveur ne la supporte pas. Ainsi, vous pouvez essayer la compression => 0 dans l'appel du constructeur. Voir http://search.cpan.org/dist/Net-SSH-Perl/lib/Net/SSH/Perl.pm#Net%3A%3ASSH%3A%3APerl-%253Enew(%24host%2C_%25params) –

2

Je pense que peut-être l'outil que vous voulez n'est pas Perl mais Expect. Il est conçu exactement pour interagir avec le logiciel de ligne de commande par programmation. Il est écrit en Tcl, qui est une langue un peu plus simple que Perl, mais largement dans la même famille et pas difficile à apprendre.

+0

Merci Norman, je l'ai déjà travaillé dans Expect .. Mais je dois le faire dans Perl pour une raison quelconque .. –

+0

La documentation pour le module Perl Expect.pm a une déclaration drôle qui dit (quelque chose comme) l'auteur voulait faire Tcl/Expect disponible aux programmeurs sans les soumettre à Tcl. –

+0

Et, bien que Expect soit écrit en Tcl, Expect est encore plus simple que Tcl si vous n'avez pas besoin de fantaisie. Perl a aussi un module Expect, mais je vais toujours aimer l'original car il était si incroyablement utile pour empoisonner wtmp pour tous mes professeurs qui pensaient que wtmp était un outil utile pour vérifier qui travaillait. :) –