首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl脚本中Net::SSH::Expect的奇怪问题

Perl脚本中Net::SSH::Expect的奇怪问题
EN

Stack Overflow用户
提问于 2013-08-22 02:55:50
回答 2查看 1.2K关注 0票数 0

我正在编写一个perl脚本。我在下面捕获了它:

代码语言:javascript
复制
#!/usr/bin/perl
use Tie::File;
use Net::SSH::Expect;
use utf8;
use warnings;
use diagnostics;

# Grab password from hidden file
$pw=`cat .password`;
chomp $pw;

#Read list of 9200's from hosts.list file into an array
tie @hosts, 'Tie::File', "hosts.list" or die;

#Loop through hosts, connect via ssh, run commands, and write out log files.

foreach (@hosts) {

#Create ssh session handle
        my $ssh = Net::SSH::Expect->new (
                host => $_,
                password => $pw,
                user => 'user',
                raw_pty => 1
        );
        my $login_output = $ssh->login();
        if ($login_output !~ /.*sbc.*>/) {
                die "Login failed. Login output was $login_output";
        }
        $ssh->send("show sip errors");
        my $line;
        while ( defined ($line = $ssh->read_line()) ){
                print $line . "\n";
        }
        $ssh->close();
}

首先,我不是程序员,所以风格可能非常丑陋。很抱歉:)目标是在远程设备上运行几个命令,将结果捕获到单独的文件中,然后由第三方解析引擎(splunk)使用。

当前实现的功能能够登录到远程主机,运行命令,然后打印到stdout。不完全是这样,但仍然展示了一个很好的概念证明。

该脚本对于hosts.list文件中的前3台主机运行良好。然而,一旦它到达第四个主机,我就会收到这个异常:

代码语言:javascript
复制
Uncaught exception from user code:
    SSHAuthenticationError Login timed out. The input stream currently has the contents bellow: user@myhost.mydomain's password:  at /System/Library/Perl/Extras/5.12/Expect.pm line 828
 at /Library/Perl/5.12/Net/SSH/Expect.pm line 209
    Net::SSH::Expect::__ANON__('ARRAY(0x7fd718a03008)') called at /System/Library/Perl/Extras/5.12/Expect.pm line 828
    Expect::_multi_expect(1, 'ARRAY(0x7fd7189fbce8)', 'ARRAY(0x7fd7189f7460)') called at /System/Library/Perl/Extras/5.12/Expect.pm line 565
    Expect::expect('Expect=GLOB(0x7fd7189f1878)', 1, 'ARRAY(0x7fd718a01530)', 'ARRAY(0x7fd7189f15a8)', 'ARRAY(0x7fd71890a3d0)', 'ARRAY(0x7fd718a07470)', 'ARRAY(0x7fd7189d8b18)') called at /Library/Perl/5.12/Net/SSH/Expect.pm line 580
    Net::SSH::Expect::_sec_expect('Net::SSH::Expect=HASH(0x7fd718a29828)', 1, 'ARRAY(0x7fd718a01530)', 'ARRAY(0x7fd7189f15a8)', 'ARRAY(0x7fd71890a3d0)', 'ARRAY(0x7fd718a07470)', 'ARRAY(0x7fd7189d8b18)') called at /Library/Perl/5.12/Net/SSH/Expect.pm line 213
    Net::SSH::Expect::login('Net::SSH::Expect=HASH(0x7fd718a29828)') called at ./pcscfFetch.pl line 26

你知道问题出在哪里吗?我可以通过ssh手动登录主机,没有任何问题。这个脚本在我们的其他主机上运行得很好,只有一个异常值,我似乎无法理解。任何建议都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-08-23 04:20:41

我最终解决了这个问题。在$ssh的构造函数中,我将超时设置为10秒,而不是默认的1秒。脚本的运行速度明显慢了很多,但我似乎没有遇到以前遇到的问题。感谢您的反馈!

票数 0
EN

Stack Overflow用户

发布于 2013-08-26 14:39:08

Net::SSH::Expect不可靠。

请改用Net::OpenSSH,或者如果您希望在多个主机上运行相同的命令集Net::OpenSSH::Parallel。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18365492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档