如果错误,perl ssh移动到next

时间:2014-12-19 07:03:11

标签: perl ssh

我的网络中有很少的路由器接受telnet和其他几个只接受ssh的路由器。 所以我使用了这个模块(SSH_TELNET :: ssh_telnet;)

现在有一台路由器(blys830)不接受我的凭证。我希望在这种情况下尝试下一个路由器并跳过当前路由器。

这是我的代码但没有工作。

use SSH_TELNET::ssh_telnet;

my @node=("blys830","brtc817");
my @op;
my $ok=1;
$user="xxxx";
chomp $user;
$pass="xxx";
chomp $pass;

foreach $node (@node) {
$node=~s/^\s+|\s+$//g;

$session = SSH_TELNET::ssh_telnet->new("$node") or $ok=0;
$session->login($user,$pass) or $ok=0;

if (!$ok) {
print "not OK\n";
next;
}

else {
$session->cmd('term len 0');
@op=$session->cmd('sh isis neighbor');
}

$session->disconnect;
}

我原本期待它转移到下一个路由器,但它打印在输出下方。

blys830 TELNET authentication failed at test_ssh.pl line 47

有什么建议吗?

此致 马赫什

1 个答案:

答案 0 :(得分:0)

使用eval:

use SSH_TELNET::ssh_telnet;

my @node=("blys830","brtc817");
my @op;
my $ok=1;
$user="xxxx";
chomp $user;
$pass="xxx";
chomp $pass;

foreach $node (@node) {
$node=~s/^\s+|\s+$//g;
eval {
$session = SSH_TELNET::ssh_telnet->new("$node") or $ok=0;
$session->login($user,$pass) or $ok=0;
}
if (!$ok) {
print "not OK\n";
next;
}

else {
eval {
$session->cmd('term len 0');
@op=$session->cmd('sh isis neighbor');
}
}

$session->disconnect;
}