通过perl中的ssh查找远程服务器的主机名

时间:2014-07-15 13:59:57

标签: perl ssh

我有一个包含一系列IP的数组。现在我正在尝试通过ssh连接到这些IP并回显它们的主机名。我来到了this Stackoverflow answer,但没有得到太多信息。这就是我所拥有的:

#!/usr/bin/perl
use warnings;
use strict;
use Term::ANSIColor;
print colored( "Number of machines: \n", 'green' );
my $number = <>;

my @arr = ();
my $ip = 0;
while (@arr < $number) {
        print colored( "\nIP Address: \n", 'green' );
        my $IP = <STDIN>;
        chomp $IP;
        push @arr, $IP;
}


print colored( "this is the hostname:\n", 'green' ); foreach $ip (@arr) {
        print "`ssh host\@$ip hostname \n`";
}

但我收到以下错误:

Can't use string ("IP") as an ARRAY ref while "strict refs" in use at

删除use strict; the error is also removed, but the code still doesn't work


编辑: \ @做了删除错误的技巧,但现在只打印

`ssh axiroot@172.31.222.135` `hostname` 

虽然它应该只打印主机名

3 个答案:

答案 0 :(得分:5)

语法

@$ip

在print语句中被解释为数组引用。这就是导致错误的原因。

尝试转义:

"...host\@$ip..."

此外,您可以使用反引号执行命令并捕获输出

`ssh bla@example.com hostname`

但你用引号包围了反引号,使它们变得无用......我想你想要删除引号。

答案 1 :(得分:2)

print语句中的

@$ip是你的问题。请尝试更改为\@$ip

答案 2 :(得分:0)

您的打印有太多的引号来执行ssh命令。尝试

 print `ssh host\@$ip hostname \n`;

system "ssh host\@$ip hostname \n";

最后,&#34;主持人&#34;必须是远程计算机上的有效用户。 ssh的语法是

ssh user@remote-host