任何人都可以建议一个非常简单的方法在Windows中使用Net :: SSH :: Perl,而不是所有的cygwin黑客和所有.
每当我尝试安装模块时,它都会将我带到其他一些依赖模块,这个过程似乎永无止境.
先谢谢
小智 7
这是我发现如何做到这一点的帖子.
我最近有一个项目需要脚本来执行与Cisco设备的SSH会话并进行一些配置更改.我最喜欢的脚本语言当然是perl.
我以前使用Net :: Telnet模块编写脚本,该模块将Telnet到设备,检测各种设备提示并向设备发送命令以更改其配置.因此,我认为这只是一个相当直接的案例,只是找到一个使用SSH而不是Telnet的合适的类似模块.
我需要提到的另一件事是我通常被限制使用Win32平台(即Windows 200,2003,XP),因为我这些天工作的大多数客户端站点都不使用Unix(或Linux). .在我看来,这是一个真正的遗憾,但我没有制定我的客户的公司政策.
最初浏览一下可用的perl模块,发现了许多模块,这些模块似乎正是我所需要的:
Net :: Appliance :: Session Net :: SSH :: W32Perl Net :: SSH
所以,我告诉我的老板,"是的,没有问题",并着手将脚本连接到远程设备的SSH并发送一些命令来更改其配置.
经过一天左右的尝试各种模块,我想:'嗯,也许这不会像我想的那么容易!'
在Windows环境中使用它时,我看过的每个模块似乎都有问题.总而言之,以下是我在每个模块中发现的问题:
* 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
Run Code Online (Sandbox Code Playgroud)
所以,在这一点上,我开始认为这可能只是在Windows上根本不起作用....
然后,我记得在perl mongers上看过一个帖子,其中有人提到他们在cygwin中使用了perl来运行其中一个Net ::*模块.
所以,虽然不得不下载和安装cygwin的想法最初看起来并不太吸引人,但我想我会试一试,因为我无处可去.
Cygwin的
Cygwin是......好吧,让我直接从cygwin网站引用:
``Cygwin是一个类似Linux的Linux环境.它由两部分组成:
DLL(cygwin1.dll),充当Linux API仿真层,提供大量Linux API功能.一系列提供Linux外观的工具.
Cygwin DLL目前适用于所有最近商业发布的x86 32位和64位版本的Windows,Windows CE除外.
因此,它允许您在Linux类型的环境中运行...对于我一直在关注的各种Net ::*模块来说听起来更有希望.
此外,一旦安装了基本的cygwin核心,它允许您下载并安装许多其他好东西,包括perl!
所以,我开始通过从cygwin主页下载'setup.exe'文件并在我的PC上运行来安装cygwin.
Cygwin提供了一个非常直观的GUI,让您选择一个镜像来下载文件,以及您要下载哪些软件包.
以下是我安装的软件包,而不仅仅是为您安装的基本核心cygwin软件包:
gcc-core gnupg make ncftpget openSSH perl perl-ExtUtils wget zip
如果你愿意,你可以安装其他人(另外),但这些对我来说很合适.
Perl的
一旦我安装了cygwin(包括我包含的perl发行版),我就准备添加我想要尝试使用的模块(例如Net :: SSH :: Appliance).
如果您熟悉Unix系统上的perl,那么您可能非常熟悉CPAN shell以将模块添加到perl发行版中.在cygwin下,过程完全相同.
如果您习惯使用Activel的Activestate版本,则可能习惯使用Activestate PPM管理器将新模块添加到perl.好吧,坏消息是在cygwin下,你没有PPM管理器,你必须使用CPAN shell,如果你不熟悉它,使用起来有点棘手.然而,好消息是您可以访问更多的perl模块!
当您安装cygwin时,它会在某处放置一个图标(在您的桌面上,快速栏或开始菜单),以便您可以启动cygwin shell(它看起来像这样:
如果单击shell图标,您将打开一个很好的cygwin shell,您可以在其中键入各种命令.您可以将其视为所有意图和目的的Unix shell.
要加载您需要的perl模块,您需要在命令提示符下输入"cpan".这将允许您将新模块加载到perl发行版中.
现在,当你第一次进入CPAN shell时,它会给你提供很多相当尴尬的问题,关于各种实用程序的位置以及你想要使用的镜像.总的来说,如果你安装了我推荐用于cygwin的模块,你可以接受默认值.(镜子你必须自己弄清楚 - 这取决于你在世界的哪个地方).
我建议你改变默认设置的唯一设置是关于你是否应该"询问或关注"前必备模块的问题 - 我会去'跟随'以节省很多麻烦.
一旦你打开cpan shell(你可以告诉,因为你现在有'cpan>'提示符),你需要输入以下命令来加载你需要的一些perl模块:
安装LWP(接受所有问题的默认值)安装Net :: Appliance :: Session
当您输入这些命令时,在为您安装模块时,您会看到很多东西在屏幕上飞扬.
运行脚本
好吧,在这一点上,我们通过在您的平台上获得cygwin和perl的方式进行了一次相当旋风的旅行,但是您现在应该可以运行一些perl脚本了.
我们将Net :: Appliance :: Session模块安装到你的perl发行版中,这样我们就可以运行perl脚本来使用它来为目标设备提供Telnet或SSH会话.
当我们在cygwin环境下运行时,我们现在可以在Windows平台上使用此模块 - 这是我们无法通过安装Activestate perl,甚至在Windows下编译我们自己的perl版本所能做到的.所以,现在,我们可以运行perl脚本,这将允许我们对仅支持SSH的网络设备执行SSH会话.
您可能想知道:``这是否意味着我每次需要运行它时都必须从cygwin shell运行我的perl脚本?''.嗯,好消息是,不,你不.. ..!只要你调用cygwin perl可执行文件来运行你的脚本,它就可以在DOS提示符(或系统调度程序!)中正常运行.所以,这样可以正常工作:
c:\ c:\ cygwin\bin\perl.exe myscript.pl
无论如何,我想这足以让你知道我是如何破解我的特定问题的.我希望在未来的aritcles中更详细地介绍所有这些内容,并提供有关如何使用非常有用的Net :: Appliance :: Session模块创建一些有用的脚本来控制和配置网络设备的更多信息.
http://perlwin32ssh.blogspot.com/2007/07/test_4418.html