# Using Plink.exe to remotely logon to remote RedHat Linux server to run local Perl script

Long time member, first time poster. I have researched this issue thoroughly but I have not found a solution to this particular issue.

I work in a NOC and I am responsible for monitoring servers. From time to time I get sent lists with hundreds of IPs that I need to check and get the status of for a report.

While researching this issue I found this script that seemed it would do exactly what I need.

LinuxPingScript.pl

#!/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);


I open a command prompt on my local windows machine and I run this command:

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


My thoughts on formatting the command this way is as follows:

plink -ssh username@Ipaddress -pw password (this successfully logs me into the remote server)

Then I extended it to this:

plink -ssh username@Ipaddress -pw password (hostname;pwd;whoami;perl -e perl)* (this will ssh into the server, and then run the commands: hostname, pwd, whoami, & perl -e perl (this was in effort to start the perl interpreter on the remote server before calling the script with -m)

I get the output from the first 3 commands then I get a blinking cursor under the results of the whoami command.

So now I try to set the path to the local script which you see posted above:

When I run the above command I get this error:

bash: -c: line 0: syntax error near unexpected token -m' bash: -c: line 0:(hostname;perl) -m C:\Users\path\to\file\LinuxPingScript.pl

Is there another way to start the interpreter before I call the script? Or is there another way to go about this? I have to run the ping test from the remote server that's which I normally access with Putty. But I thought since this could be automated I could use Plink.

I'm pretty new to this and would appreciate any help I can get.

• There's nothing Linuxy in that script. Unless your network connectivity varies depending on host (which does happen) you could install perl on your Windows machine and run the perl script directly. – dave_thompson_085 Jan 24 at 7:40

The file specified using PuTTY/Plink -m switch cannot be a shell script. It can contain a list of top-level shell commands only, which are executed one by one. And actually some SSH servers do not even support multiple commands, just one.

If you want to execute a Perl script, you can:

• Upload it to the server and execute it

plink -ssh username@Ipaddress -pw password perl ./LinuxPingScript.pl

• Execute Perl on the server and feed the script to it:

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

• That makes sense. Can you elaborate on the 1st option please? The script requires IP_list.txt to read from when it executes to create the IP_array. So in this scenario would I have to upload ip_list.txt to the remote server before attempting to run the script? Or is there a way to have the script read the list from my local machine and give me the output. Again i really do appreciate the assistance as I'm doing my best to learn this. – HempKnight Jan 24 at 3:03
• If you change the script to read the list from its standard input, you can do: plink -ssh username@Ipaddress -pw password perl ./LinuxPingScript.pl < IP_list.txt (where IP_list.txt is a local file). – Martin Prikryl Jan 24 at 7:21
• Thank you again Martin for the reply. For the method you show above: " plink -ssh username@Ipaddress -pw password perl ./LinuxPingScript.pl < IP_list.txt (where IP_list.txt is a local file)." Does IP_list.txt need to live on the linux server I'm ssh'd into? or will this still work if the IP_list.txt file is on my local Windows machine where I'm initiating the connection. – HempKnight Jan 29 at 2:49
• My comment says that already: "where IP_list.txt` is a local file"* == on your local Windows machine - that's the point of my comment. – Martin Prikryl Jan 29 at 6:10
• I tried to explain that I was new to this so I asked for clarification. If it was clear sir I would not have asked. I do greatly appreciate your assistance in helping me figure this out – HempKnight Jan 30 at 8:58