`ssh host command`无法返回命令的结果

时间:2013-06-03 13:26:17

标签: perl

有几台电脑,我想使用who命令查看谁在线。我写了一个脚本可以让我检查所有的电脑,但它似乎没有返回谁在线的信息....

计算机暂停。

我尝试输入此命令=> ssh f-001 who,它有效。但是当我把它写入脚本时,它失败了。

这是我的代码

@Hosts = ("f-001","f-002","f-003","f-004","f-005");

for($i=0;$i<=$#Hosts;$i++)
{
        `ssh $Hosts[$i] who`;
        getc();
}

感谢 〜 〜

4 个答案:

答案 0 :(得分:3)

结果不会显示,因为在执行命令时,实际上并没有显示其输出;你需要做一些像

这样的事情
print `ssh $Hosts[$i] who`;

假设您正在使用ssh-agent,Kerberos或其他允许您在不提供密码的情况下登录的内容,则暂停只是`getc()。

答案 1 :(得分:3)

改为使用system()

@Hosts = ("f-001","f-002","f-003","f-004","f-005");

foreach $host (@Hosts)
{
    system ("ssh $host who");
}

请不要使用$i进行迭代。

Run3更方便。

答案 2 :(得分:1)

我想在这里添加一件事是,如果你想进一步使用命令输出的数据,那么记住你需要捕获输出,如

my @users = `ssh $Hosts[$i] who`;

答案 3 :(得分:1)

我认为这里的答案涵盖了您的需求,但会强调使用foreach 的价值,例如

foreach my $host ("mail1", "san", "ws100.internal"){ say qx/ping -c1 $host/}

您打算如何处理输出?除非您正在观看终端,否则您将要在某处记录或写入结果。 Log::Dispatch非常简单,但您可以让脚本记录到文件,旋转它们,发送电子邮件等。

如果您要进行大量远程执行和监控,请务必查看Rex https://metacpan.org/pod/Rex(以及http://www.rexify.com)。