【问题标题】:return remote ssh version in perl using Net::SSH2使用 Net::SSH2 在 perl 中返回远程 ssh 版本
【发布时间】:2015-10-31 01:21:44
【问题描述】:

我需要从 Windows 使用 Net::SSH2 获取远程 sshd 版本

   ./check_ssh -H exemple.com 
    OpenSSH_6.0p1  (Protocol 2.0)

在 ssh 关闭的情况下,如果连接没有被明确拒绝,则只显示连接被拒绝或 Socket Timeout。

最终目的是在 windows 框中模拟 check_ssh nagios 插件的行为。我将从那个 windows 框连接到一个 unix 设备,并通过 nrpe 将我的脚本结果发送到 nagios。

我不需要登录。 我一直在尝试在 dwim perl Net::SSH::Perl 中安装但没有成功,我唯一设法安装的是 Net::SSH2。我不需要 ssh v1 的支持。

【问题讨论】:

  • 请包括您在尝试安装 Net::SSH::Perl 时遇到的错误。
  • Net::SNMP::Perl 旧且未维护link 与此相同:已经 2 岁没有解决方案。 link

标签: windows perl ssh


【解决方案1】:

您可以使用IO::Socket::INET 模块。例如:

$ cat ssh.pl
#!/usr/bin/perl

use IO::Socket::INET;

my $socket = IO::Socket::INET->new(
  PeerHost => 'localhost',
  PeerPort => 22,
);

$socket->print("\n");
my $output = join '', $socket->getlines();

print $output;

输出的样子:

$ ./ssh.pl
SSH-2.0-OpenSSH_6.2
Protocol mismatch

从这一点开始,您只需要解析输出。

【讨论】:

  • 如何模拟连接超时?或当连接被拒绝时。我得到了这个:can't call method print on an undefined value at check_ssh.pl line 44
  • 模拟?你是说手柄吗?查看 IO::Socket::INET 文档,您可以设置一个超时参数。 perldoc.perl.org/IO/Socket/INET.html
【解决方案2】:

如果您可以安装 netcat 实用程序,您可以使用它来检查它。例如:

 my $NC = `nc -w 1 localhost 22`;
 print $NC;

在本例中,netcat 连接到 localhost 的 22 端口并在 1 秒后超时。

【讨论】:

  • netcat for windows.. 被我公司的防病毒软件标记为病毒。如果可能的话,我更喜欢使用 snmp 模块。
  • cygwin 呢?可以用它安装netcat。
  • 这是公司服务器。 perl 及其模块是我可以安装的最大模块,他们例外,因为它是我需要检查的服务器所在网络的唯一网关。我宁愿只使用 Perl 模块。
猜你喜欢
  • 2020-01-06
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 2019-06-09
  • 2012-09-18
  • 2022-11-22
相关资源
最近更新 更多