这是我找到的关于如何做的帖子。
我最近有一个项目需要一个脚本来执行与 Cisco 设备的 SSH 会话并进行一些配置更改。我最喜欢的脚本语言当然是 perl。
我之前使用 Net::Telnet 模块编写了脚本,该模块将 Telnet 到设备,检测各种设备提示并向设备发送命令以更改其配置。因此,我认为这将是一个相当简单的案例,只需找到一个使用 SSH 而不是 Telnet 的合适的类似模块。
我需要提到的另一件事是,由于我现在工作的大多数客户端站点都不使用 Unix(或Linux) ..在我看来是一个真正的遗憾,但我没有为我的客户制定公司政策。
对可用的 perl 模块的初步浏览显示了一些似乎正是我需要的模块:
Net::Appliance::Session
网络::SSH::W32Perl
网络::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 是一个类似 Linux 的 Windows 环境。它由两部分组成:
一个 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 核心
gnupg
制作
ncftpget
打开SSH
perl
perl-ExtUtils
wget
拉链
如果你愿意,你可以安装其他的(额外的),但是这些对我来说已经完成了。
Perl
一旦我安装了 cygwin(包括我包含的 perl 发行版),我就可以添加我想尝试使用的模块(例如 Net::SSH::Appliance)。
如果您熟悉 Unix 系统上的 perl,那么您可能会非常熟悉 CPAN shell 以将模块添加到您的 perl 发行版中。在cygwin下,流程完全一样。
如果您习惯使用 Activestate 版本的 perl,您可能习惯使用 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 脚本了。
我们在您的 perl 发行版中安装了 Net::Appliance::Session 模块,以便我们可以运行 perl 脚本,使用它为我们提供到目标设备的 Telnet 或 SSH 会话。
由于我们在 cygwin 环境下运行,我们现在可以在 Windows 平台上使用这个模块 - 这是我们无法通过安装 Activestate perl 甚至在 Windows 下编译我们自己的 perl 版本来实现的。所以,现在,我们可以运行 perl 脚本,允许我们对仅支持 SSH 的网络设备执行 SSH 会话。
您可能想知道:``这是否意味着每次需要运行我的 perl 脚本时都必须从 cygwin shell 运行它们?''。好吧,好消息是,不,你没有..!只要您调用 cygwin perl 可执行文件来运行脚本,它就会在 DOS 提示符(或系统调度程序!)下正常运行。所以,这会很好:
c:\c:\cygwin\bin\perl.exe myscript.pl
无论如何,我想这足以让您知道我是如何解决我的特定问题的。我希望在以后的文章中更详细地介绍所有这些,并提供更多关于如何使用非常有用的 Net::Appliance::Session 模块来创建一些有用的脚本来控制和配置网络设备的信息。
http://perlwin32ssh.blogspot.com/2007/07/test_4418.html