使用 Plink.exe 远程登录远程 RedHat Linux 服务器运行本地 Perl 脚本

使用 Plink.exe 远程登录远程 RedHat Linux 服务器运行本地 Perl 脚本

长期会员,第一次发帖。我已经彻底研究过这个问题,但还没有找到解决该问题的方法。

我在网络运营中心工作,负责监控服务器。有时我会收到包含数百个 IP 的列表,我需要检查这些 IP 并获取其状态以生成报告。

在研究这个问题时,我发现这个脚本似乎能够满足我的需要。

LinuxPing脚本

#!/usr/bin/perl

use Net::Ping;
use strict;

open(INFILE, "<", "ip_list") or die("cannot open INFILE:  $!");

my @ip_array = <INFILE>;

close(INFILE);

open(OUTFILE, ">", "ping_output") or die("unable to write output: $!");


chomp(@ip_array);

$p = Net::Ping->new();

foreach(@ip_array)
  {
   if($_ =~ /\d+.\d+.\d+.\d+/)
      { 
    if($p->ping($&))
          {
            print OUTFILE ("$`is responding to ping.\n");
          }
        else
          {
            print OUTFILE ("$`is NOT responding to ping.\n");
          }
      } 

  } 

close(OUTFILE);

我在本地 Windows 机器上打开命令提示符并运行以下命令:

plink -ssh username@Ipaddress -pw password (perl) -m C:\Users\path\to\file\LinuxPingScript.pl

我对以这种方式格式化命令的想法如下:

plink -ssh username@Ipaddress -pw password (这成功让我登录到远程服务器)

然后我将其扩展为:

plink -ssh username@Ipaddress -pw password (hostname;pwd;whoami;perl -e perl)*(这将通过 ssh 进入服务器,然后运行命令:hostname、pwd、whoami、&perl-e perl(这是为了在使用 -m 调用脚本之前启动远程服务器上的 perl 解释器)

我得到了前 3 个命令的输出,然后在 whoami 命令的结果下得到了一个闪烁的光标。

因此现在我尝试设置上面发布的本地脚本的路径:

plink -ssh 用户名@Ipaddress -pw 密码 (主机名;pwd;whoami;perl) -m C:\Users\path\to\file\LinuxPingScript.pl

当我运行上述命令时出现此错误:

bash:-c:第 0 行:意外标记-m' bash: -c: line 0:(主机名;perl)附近出现语法错误 -m C:\Users\path\to\file\LinuxPingScript.pl`

在调用脚本之前,还有其他方法可以启动解释器吗?或者还有其他方法可以解决这个问题?我必须从我通常使用 Putty 访问的远程服务器运行 ping 测试。但我认为既然这可以自动化,我可以使用 Plink。

我对此还很陌生,如果能得到任何帮助我将非常感激。

答案1

使用 PuTTY/Plink 开关指定的文件-m不能是 shell 脚本。它只能包含顶级 shell 命令列表,这些命令会逐个执行。实际上,有些 SSH 服务器甚至不支持多条命令,只支持一条命令。

如果你想执行一个 Perl 脚本,你可以:

  • 上传到服务器并执行

    plink -ssh username@Ipaddress -pw password perl ./LinuxPingScript.pl
    
  • 在服务器上执行 Perl 并将脚本提供给它:

    plink -ssh username@Ipaddress -pw password perl < C:\Users\path\to\file\LinuxPingScript.pl
    

相关内容