2010-09-11 4 views
7

Quelqu'un peut-il suggérer une façon très simple d'utiliser Net :: SSH :: Perl dans Windows sans tous ces hacks cygwin et tous.Comment pouvons-nous configurer SSH en utilisant Perl dans Windows?

Chaque fois que je suis en train d'installer les modules, il me prend à d'autres modules dépendants et le processus semblais sans fin ..

Merci d'avance

+0

Strawberry Perl ou ActiveState? (ou * autre *?) – mob

+0

... ou peut-être Cygwin Perl? – bart

+0

J'ai demandé et on m'a dit que vous pourriez vouloir regarder [Net :: SSH2] (http://cpan.uwinnipeg.ca/dist/Net-SSH2). Paquets PPM disponibles sur ce site. – bart

Répondre

7

Voici un post sur la façon de le faire, j'ai trouvé.

J'ai récemment eu un projet qui nécessitait un script pour effectuer une session SSH sur un périphérique Cisco et apporter quelques modifications à la configuration. Mon langage de script préféré est, bien sûr, perl. J'ai déjà écrit des scripts en utilisant le module Net :: Telnet qui permet de Telnet à un périphérique, de détecter diverses invites de périphérique et d'envoyer des commandes à l'appareil pour modifier sa configuration. Donc, je pensais que ce serait un cas assez simple de trouver juste un module similaire approprié qui utilise SSH au lieu de Telnet. L'autre chose que je dois mentionner est que je suis généralement contraint d'utiliser des plates-formes Win32 (Windows 200, 2003, XP) parce que la plupart des sites clients sur lesquels je travaille ces jours-ci n'utilisent pas Unix (ou Linux) ..qui est vraiment dommage à mon avis, mais je ne définis pas les politiques d'entreprise de mes clients.

Un coup d'oeil initial des modules Perl disponibles a révélé un certain nombre de modules qui semblait être juste ce que je avais besoin:

Net :: Appliance :: Session Net :: SSH :: Net :: W32Perl SSH Donc, j'ai dit à mon patron, 'Yep, pas de problème' et je me suis mis à rassembler un script vers SSH dans un périphérique distant et lui ai envoyé quelques commandes pour changer sa configuration. Après un jour ou deux d'essayer différents modules, j'ai pensé: 'Hmmm, peut-être que ça ne va pas être aussi facile que je le pensais!' Tous les modules que j'avais examinés semblaient avoir un problème quand il s'agissait de l'utiliser dans un environnement Windows. En résumé, voici les questions que je retrouvais avec chaque module:

* Net::Appliance::Session : has a dependency on IO::Pty, which won't ever run on Windows 
* Net::SSH::W32Perl : ``getpwuid function is unimplemented'' message`` when building from scratch. Older ppd's found at http://www.soulcage.net/ppds.58 just don't seem to work....even when installed in to the Activestate perl distribution 
* Net::SSH : Unix only 

Donc, à ce moment-là, je commençais à penser que peut-être cela juste ne va pas fonctionner du tout sur Windows ....

Ensuite, je me suis souvenu d'avoir vu une publication sur perl mongers où quelqu'un a mentionné qu'ils avaient utilisé perl dans cygwin pour exécuter l'un des modules Net :: *. Donc, bien que l'idée de devoir télécharger et installer cygwin n'ait pas semblé trop attrayante au début, j'ai pensé que j'allais essayer car je n'avais nulle part ailleurs où aller.

Cygwin

Cygwin est ... eh bien, permettez-moi de citer le site Web Cygwin:

`` Cygwin est un environnement Linux comme pour Windows. Il se compose de deux parties:

Une DLL (cygwin1.dll) qui agit comme une couche d'émulation d'API Linux fournissant des fonctionnalités substantielles de l'API Linux. Une collection d'outils qui fournissent l'aspect et la sensation de Linux.

La DLL Cygwin fonctionne actuellement avec tous x86 32 récent, commercialement publié bits et les versions 64 bits de Windows, à l'exception de Windows CE.``

Ainsi, il vous permet d'exécuter dans un type Linux environnement ... semble beaucoup plus prometteur pour les différents modules Net :: * que j'avais examinés.

De plus, une fois le noyau cygwin de base installé, il vous permet de télécharger et d'installer une foule d'autres objets, y compris perl! J'ai donc commencé à installer cygwin en téléchargeant le fichier 'setup.exe' de la page d'accueil de cygwin et en l'exécutant sur mon PC. Cygwin fournit une interface graphique intuitive qui vous permet de sélectionner un miroir dans lequel télécharger les fichiers et les paquets que vous souhaitez télécharger.

Voici les paquets que j'installés au-delà des paquets Cygwin de base de base qui sont installés pour vous:

gcc-core GnuPG faire ncftpget openSSH perl perl-ExtUtils wget zip

Vous pouvez en installer d'autres (en plus) si vous le souhaitez, mais ceux-ci ont fait l'affaire pour moi.

Perl

Une fois que je l'avais installé Cygwin (y compris la distribution de perl que je compris), j'étais prêt à ajouter dans les modules que je voulais essayer d'utiliser (par exemple Net :: SSH :: Appliance) . Si vous êtes familier avec les systèmes Unix de Perl, alors vous serez probablement très familier avec le shell CPAN pour ajouter des modules dans votre distribution Perl. Sous cygwin, le processus est exactement le même.

Si vous avez l'habitude d'utiliser la version Activestate de perl, vous êtes probablement habitué à utiliser le gestionnaire Activestate PPM pour ajouter de nouveaux modules à perl. Eh bien, les mauvaises nouvelles sont que sous cygwin, vous n'avez pas de gestionnaire PPM, et vous devez utiliser le shell CPAN, qui est un peu plus compliqué à utiliser si vous n'y êtes pas habitué. La bonne nouvelle est que vous aurez accès à beaucoup plus de modules perl!

Lorsque vous avez installé Cygwin, il aura mis une icône quelque part (sur votre bureau, bar quicklauch ou le menu démarrer) afin que vous puissiez lancer le shell Cygwin (il ressemble à ceci:

Si vous cliquez sur l'icône shell, vous obtiendrez une coquille de Cygwin belle ouvrir où vous pouvez taper différentes commandes. vous pouvez penser comme un shell Unix à toutes fins utiles.

pour charger les modules perl dont vous aurez besoin , vous devez entrer 'cpan' à l'invite de commande, ce qui vous permettra de charger de nouveaux modules dans votre distribution perl

Maintenant, la première fois que vous allez dans le shell CPAN, il va vous poser beaucoup de questions embarrassantes sur l'emplacement des différents utilitaires et le miroir que vous souhaitez utiliser. Dans l'ensemble, si vous avez installé les modules que j'ai recommandés pour cygwin, vous pouvez accepter les valeurs par défaut. (Le miroir que vous devrez comprendre par vous-même - cela dépend où vous êtes dans le monde).

Le seul réglage que je vous recommanderais de changer par défaut est la question de savoir si vous devriez être 'demandé ou suivi' pour les modules pré-requis - je voudrais aller 'suivre' pour économiser beaucoup de tracas.

Une fois que vous avez votre shell CPAN ouverte (vous pouvez le dire, parce que vous avez maintenant un « CPAN> » invite), vous devez saisir les commandes suivantes pour charger dans certains modules perl que vous aurez besoin:

installer LWP (accepter toutes les valeurs par défaut à toutes les questions posées) installer Net :: Appliance :: Session

Lorsque vous entrez ces commandes, vous verrez beaucoup de choses voler à l'écran que les modules sont installés pour vous.

Scripts en cours

Eh bien, à ce moment-là, nous avons pris une visite éclair à travers plutôt obtenir Cygwin et perl instalé sur votre plate-forme, mais vous devriez maintenant être en mesure d'exécuter des scripts Perl.

Nous avons installé le module Net :: Appliance :: Session dans votre distribution Perl, afin que nous puissions exécuter des scripts Perl qui vont l'utiliser pour nous donner des sessions Telnet ou SSH à un périphérique cible. Comme nous fonctionnons sous l'environnement cygwin, nous pouvons maintenant utiliser ce module sur une plateforme Windows - quelque chose que nous ne pouvions pas faire en installant simplement Activestate perl, ou même en compilant notre propre version de perl sous Windows. Donc, maintenant, nous pouvons exécuter des scripts Perl qui nous permettront d'effectuer des sessions SSH sur des périphériques réseau qui ne supportent que SSH.

Vous vous demandez peut-être: `` cela signifie-t-il que je dois exécuter mes scripts perl à partir du shell cygwin chaque fois que je dois les exécuter? ''. Eh bien, les bonnes nouvelles sont que non, vous ne ..! Tant que vous appelez l'exécutable cygwin perl pour exécuter votre script, il fonctionnera correctement à partir d'une invite DOS (ou du programmateur système!). Donc, cela fonctionne très bien:

c: \ c: \ Cygwin \ bin \ perl.exe myscript.pl

Quoi qu'il en soit, je suppose que ce assez pour vous laisser savoir comment je craque ma question particulière. J'espère couvrir tout cela plus en détail dans les prochains articles, et fournir plus d'informations sur la façon d'utiliser le module Net :: Appliance :: Session incroyablement utile pour créer des scripts utiles pour contrôler et configurer vos périphériques réseau.

http://perlwin32ssh.blogspot.com/2007/07/test_4418.html

+0

+2 mais je ne peux pas parce que je ne peux voter qu'une seule fois. –

2

Pour ActiveState Perl, vous pouvez probablement essayer pour le module Net :: SSH2. J'ai essayé avec quelques exemples en ligne et cela a fonctionné pour moi.

Vous pouvez parcourir les ressources suivantes pour installer et exécuter un exemple d'exemple en utilisant Net :: SSH2.

Utilisez ce référentiel pour installer quelques Net :: SSH2 http://theoryx5.uwinnipeg.ca/ppms/

d'exemples: http://www.perlmonks.org/?node_id=569657

Espérons que cela fonctionnera pour vous. Je l'ai essayé et ça a marché pour moi.

2

La réponse à l'utilisation de Perl depuis Cygwin puis l'appel de la ligne de commande Windows est la bonne réponse. MERCI BEAUCOUP POUR VOTRE EFFORT!

Cependant, cette méthode pour appeler une instance PERL en cours d'exécution dans Cygwin de la ligne de commande Windows est pas toujours optimale:

c: \ Cygwin \ bin \ perl.exe myscript.pl

Cette technique fonctionnera avec certains scripts Perl mais pas tous. Il me donnait un diable en essayant d'utiliser NET: SSH: EXPECT et la méthode login(). Il avorterait avec d'étranges erreurs.

Une meilleure façon d'appeler votre instance Perl en cours d'exécution dans Cygwin partir de l'invite de commande Windows est la suivante:

c: \ Cygwin \ bin \ bash --login -c 'perl myscript.pl' Cela semble exécuter le script Perl entièrement dans l'environnement Cygwin et même les scripts Perl compliqués ou ceux avec de nombreuses dépendances ou ne pouvant pas gérer les noms de chemins de style MSDOS, seront toujours exécutés. Vous pouvez toujours renvoyer la sortie du script Perl dans la fenêtre de commande Windows, par exemple en utilisant print() à partir de votre script Perl.

Questions connexes