我正在尝试打开设备列表文件来运行命令但是收到“未打开的文件句柄”错误。我怎么解决这个问题?错误发生在while (<List>) {
行。
#!\usr\bin\Perl\bin\perl
use warnings;
use strict;
use NET::SSH2;
use MIME::Base64;
my $host = "C:/temp/devices.txt"; # input file
my $user = "XXX"; # your account
my $pass = "XXXXX"; # your password 64 bit mime
my $ssh2 = Net::SSH2->new();
my $result = "C:/temp/result1.txt"; # output file
$ssh2->debug(1); # debug on/off
open(List, '<', "$host" ) or die "$!";
my @lines = <List>;
for my $line (@lines) {
$ssh2->connect($line) or die "Unable to connect host $@ \n";
my $dp=decode_base64("$pass");
$ssh2->auth_password("$user","$dp");
my $chan = $ssh2->channel();
$chan->exec('sh ver');
my $buflen =30000;
my $buf1 = '0' x $buflen;
$chan->read($buf1, $buflen);
close (LIST);
#### ## print in file
open (OUTPUT, '>', "C:/temp/result.txt") or die "$!";
open (OUTPUT, '>', "$result") or die "$!";
print OUTPUT "Result For:", "$host\n", $buf1,"\n";
close (OUTPUT);
}
答案 0 :(得分:4)
你的List
在while循环中是小写的,在其余循环中是大写的LIST
。 Perl区分大小写。
对于其余代码,您尝试做的事情并不明显。假设您需要从LIST逐行执行某些操作,请将while循环替换为:
for my $line (@lines) {
然后在您的代码中,无论您需要“当前行”,请使用$line
。
我不能在这里评论ssh模块的用法;我自己没用过。