任何人都可以build议一个非常简单的方法来使用Windows :: Net :: SSH :: Perl没有所有这些cygwin黑客和所有。
每当我试图安装模块,它把我带到一些其他依赖模块,这个过程似乎永远不会结束..
事先感谢
这里是一个关于如何做到这一点的信息,我发现。
我最近有一个项目需要一个脚本来执行一个到Cisco设备的SSH会话,并进行一些配置更改。 我最喜欢的脚本语言当然是perl。
我以前使用Net :: Telnet模块编写脚本,该模块将Telnet到设备,检测各种设备提示并向设备发送命令以更改其配置。 所以,我认为这将是一个相当简单的案例,只是找到一个合适的,类似的模块,使用SSH而不是Telnet。
另一件需要提及的事情是,由于我目前工作的大多数客户端网站都不使用Unix(或Linux),所以我通常被限制使用Win32平台(即Windows 200,2003,XP)。这在我看来是一个真正的可惜,但我并没有制定客户的公司政策。
对可用的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
所以,在这一点上,我开始认为,也许这只是不会在Windows上工作….
然后,我记得在perl mongers上看到一个帖子,有人提到他们在cygwin中使用perl来运行Net :: *模块之一。
所以,尽管下载和安装cygwin的想法起初看起来并不太吸引人,但我想我会放弃它,因为我没有别的办法。
Cygwin的
Cygwin是…好吧,让我直接从cygwin网站引用:
Cygwin是一个适用于Windows的Linux环境。 它由两部分组成:
DLL(cygwin1.dll)充当Linux API仿真层,提供大量的Linux API功能。 提供Linux外观的一系列工具。
Cygwin DLL目前可以与所有最新商业版本的x86 32位和64位版本的Windows一起使用,但Windows CE除外。
所以,它允许你在一个Linux类型的环境中运行……对于我所看到的各种Net :: *模块来说,这听起来更有希望。
另外,一旦安装了基本的cygwin核心,它允许你下载和安装一大堆其他的东西,包括perl!
所以,我开始安装cygwin,通过从cygwin主页下载'setup.exe'文件并在PC上运行它。
Cygwin提供了一个错误的直观的图形用户界面,让您选择一个镜像来下载文件,以及您想要下载哪些软件包。
下面是我安装的软件包,除了为您安装的基本核心cygwin软件包:
gcc-core gnupg make ncftpget openSSH perl perl-extUtils wget zip
如果你喜欢,你可以安装其他的(另外),但是这些工作对我来说是完成的。
Perl的
一旦我安装了cygwin(包括我所包含的perl发行版),我都会设置添加我想要使用的模块(例如Net :: SSH :: Appliance)。
如果您熟悉Unix系统上的perl,那么您可能会非常熟悉CPAN shell来将模块添加到您的perl发行版中。 在cygwin下,这个过程是完全一样的。
如果习惯于使用perl的Activestate版本,则可能习惯于使用Activestate PPM管理器将新模块添加到perl。 那么坏消息是,在cygwin下,你没有PPM管理器,你必须使用CPAN shell,如果你习惯的话,这个有点麻烦。 好消息是,你将可以访问更多的Perl模块!
当你安装了cygwin的时候,它会在你的桌面,quicklauch bar或者开始菜单中放置一个图标,这样你就可以启动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
无论如何,我想这足以让你知道我是如何破解我的特定问题的。 我希望在未来的研讨会中详细介绍所有这些内容,以及提供有关如何使用令人难以置信的Net :: Appliance :: Session模块创建一些有用的脚本来控制和配置网络设备的更多信息。
对于ActiveState Perl,可能您可以尝试Net :: SSH2模块。 我尝试了几个在线的例子,它为我工作。
您可以通过以下资源来安装和运行使用Net :: SSH2的示例示例。
使用这个版本库来安装Net :: SSH2 http://theoryx5.uwinnipeg.ca/ppms/
几个例子: http : //www.perlmonks.org/? node_id= 569657
希望这会为你工作。 我试了一下,它为我工作。
从Cygwin中使用Perl然后从Windows命令行调用它的答案是正确的答案。 非常感谢您的努力!
但是,从Windows命令行调用在Cygwin中运行的PERL实例的这种方法并不总是最佳的:
c:\ cygwin \ bin \ perl.exe myscript.pl
该技术将与一些Perl脚本,但不是全部。 这是给我嘿试图使用NET:SSH:EXPECT和login()方法。 它会中止与奇怪的错误。
从Windows命令提示符调用在Cygwin中运行的Perl实例的更好方法是:
c:\ cygwin \ bin \ bash –login -c'perl myscript.pl'
这似乎是在Cygwin环境中完全执行Perl脚本,甚至是复杂的Perl脚本或者那些具有很多依赖性或不能处理MSDOS风格路径名的Perl脚本仍然可以运行。 您仍然可以将Perl脚本的输出返回到Windows命令窗口,例如在Perl脚本中使用print() 。