我正在编写以下脚本来从文本文件中读取服务器列表ssh到它们并运行ldd命令来获取服务器上安装的版本。 唯一的问题是我看到错误,其中显示错误的主机名:
adev@abclnxdev:[/home/adev/perl-scripts] {63} % perl try.pl
Net::SSH: Bad host name: abclnxtest01
at try.pl line 21
当我手动对这个主机执行ssh时。它得到连接。 这是脚本:
#!/mu/bin/perl
use Net::SSH::Perl;
use warnings;
my $file = "server-list.txt";
my $usr = "user";
my $pwd = "password";
my $output_file = "GlibC-version.txt";
open(HANDLE, $file) or die("Cant open the file :( ");
@server_list = <HANDLE>;
close(HANDLE);
#debug_print_array(@server_list);
open(HANDLE, ">>$output_file"); #opening file for output.
foreach $host (@server_list)
{
my $ssh = Net::SSH::Perl->new($host);
$ssh->login($usr,$pwd,$ssh);
my($stdout, $stderr, $exit) = $ssh->cmd("ldd --version|grep ldd");
print HANDLE "----------------------------------";
print HANDLE "Hostname : $host";
print HANDLE "GLIBC Version : $stdout";
print HANDLE "----------------------------------\n\n";
}
答案 0 :(得分:8)
服务器名称末尾有换行符。
添加:
chomp @server_list;
(顺便说一下,最好使用较新的3个参数open()
;请参阅http://perlmaven.com/open-files-in-the-old-way。)