【问题标题】:How do we configure SSH using Perl in Windows?我们如何在 Windows 中使用 Perl 配置 SSH?
【发布时间】:2011-04-11 00:52:07
【问题描述】:

任何人都可以提出一种在 Windows 中使用 Net::SSH::Perl 的非常简单的方法,而无需所有这些 cygwin hack 等等。

每当我尝试安装模块时,它都会将我带到其他一些依赖模块,而这个过程似乎永无止境..

先谢谢

【问题讨论】:

  • 草莓 Perl 还是 ActiveState? (或其他?)
  • 我已经四处询问,并被告知您可能想查看Net::SSH2。该站点提供的 PPM 包。
  • 这是活动状态 perl。我知道cygwin会做。但关键是这也是一个非常漫长的过程,我最终会丢失其他已安装的 Active state perl 库。

标签: windows perl ssh


【解决方案1】:

这是我找到的关于如何做的帖子。

我最近有一个项目需要一个脚本来执行与 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

【讨论】:

    【解决方案2】:

    对于 ActiveState Perl,也许您可​​以尝试使用 Net::SSH2 模块。我尝试了几个在线示例,它对我有用。

    您可以通过以下资源使用 Net::SSH2 安装和运行示例示例。

    使用此存储库安装 Net::SSH2 http://theoryx5.uwinnipeg.ca/ppms/

    几个例子: http://www.perlmonks.org/?node_id=569657

    希望这对你有用。我试过了,它对我有用。

    【讨论】:

      【解决方案3】:

      关于在 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 脚本的输出返回到 Windows 命令窗口,例如在您的 Perl 脚本中使用 print()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 2018-08-31
        相关资源
        最近更新 更多