![使用 Plink.exe 远程登录远程 RedHat Linux 服务器运行本地 Perl 脚本](https://linux22.com/image/1580421/%E4%BD%BF%E7%94%A8%20Plink.exe%20%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95%E8%BF%9C%E7%A8%8B%20RedHat%20Linux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%90%E8%A1%8C%E6%9C%AC%E5%9C%B0%20Perl%20%E8%84%9A%E6%9C%AC.png)
长期会员,第一次发帖。我已经彻底研究过这个问题,但还没有找到解决该问题的方法。
我在网络运营中心工作,负责监控服务器。有时我会收到包含数百个 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