我有一个包含一系列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`
虽然它应该只打印主机名
答案 0 :(得分:5)
语法
@$ip
在print语句中被解释为数组引用。这就是导致错误的原因。
尝试转义:
"...host\@$ip..."
此外,您可以使用反引号执行命令并捕获输出
`ssh bla@example.com hostname`
但你用引号包围了反引号,使它们变得无用......我想你想要删除引号。
答案 1 :(得分:2)
@$ip
是你的问题。请尝试更改为\@$ip
。
答案 2 :(得分:0)
您的打印有太多的引号来执行ssh命令。尝试
print `ssh host\@$ip hostname \n`;
或
system "ssh host\@$ip hostname \n";
最后,&#34;主持人&#34;必须是远程计算机上的有效用户。 ssh的语法是
ssh user@remote-host