Utilisation de Plink.exe pour la connexion à distance au serveur RedHat Linux distant afin d'exécuter un script Perl local

1

Membre de longue date, première affiche. J'ai étudié ce problème à fond mais je n'ai pas trouvé de solution à ce problème particulier.

Je travaille dans un CNO et je suis responsable de la surveillance des serveurs. De temps en temps, je reçois des listes d’envois contenant des centaines d’adresses IP que je dois vérifier et obtenir le statut d’un rapport.

En recherchant ce problème, j'ai trouvé ce script qui semblait pouvoir faire exactement ce dont j'avais besoin.

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);

J'ouvre une invite de commande sur ma machine Windows locale et j'exécute cette commande:

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

Mes idées sur le formatage de la commande de cette manière sont les suivantes:

plink -ssh username@Ipaddress -pw password (cela me connecte avec succès sur le serveur distant)

Puis je l'ai étendu à ceci:

plink -ssh username@Ipaddress -pw password (hostname;pwd;whoami;perl -e perl)*(Cela fera ssh sur le serveur, puis exécutera les commandes: nomhôte, pwd, whoami et perl -e perl (ceci visait à démarrer l'interpréteur perl sur le serveur distant avant d'appeler le script avec -m)

Je reçois le résultat des 3 premières commandes, puis un curseur clignotant sous les résultats de la commande whoami.

Alors maintenant, j'essaie de définir le chemin d'accès au script local que vous voyez posté ci-dessus:

plink -ssh nom_utilisateur @ Ipaddress -pw mot de passe (nomhôte; pwd; whoami; perl) -m C: \ Utilisateurs \ chemin \ chemin \ fichier \ LinuxPingScript.pl

Lorsque j'exécute la commande ci-dessus, j'obtiens cette erreur:

bash: -c: ligne 0: erreur de syntaxe près d'un jeton inattendu -m' bash: -c: line 0:(nom d'hôte; perl) -m C: \ Utilisateurs \ chemin \ à \ fichier \ LinuxPingScript.pl`

Existe-t-il un autre moyen de lancer l'interprète avant d'appeler le script? Ou y a-t-il une autre façon de s'y prendre? Je dois exécuter le test de ping depuis le serveur distant auquel j'accède normalement avec Putty. Mais je pensais que puisque cela pourrait être automatisé, je pourrais utiliser Plink.

Je suis assez novice dans ce domaine et apprécierais toute aide que je pourrais obtenir.

HempKnight
la source
1
Il n'y a rien Linuxy dans ce script. Sauf si votre connectivité réseau varie en fonction de l'hôte (ce qui se produit), vous pouvez installer perl sur votre ordinateur Windows et exécuter le script perl directement.
dave_thompson_085

Réponses:

1

Le fichier spécifié à l'aide du -mcommutateur PuTTY / Plink ne peut pas être un script shell. Il peut contenir une liste de commandes shell de niveau supérieur uniquement, qui sont exécutées une par une. Et en fait, certains serveurs SSH ne prennent même pas en charge plusieurs commandes, une seule.

Si vous souhaitez exécuter un script Perl, vous pouvez:

  • Téléchargez-le sur le serveur et exécutez-le

    plink -ssh username@Ipaddress -pw password perl ./LinuxPingScript.pl
  • Exécutez Perl sur le serveur et envoyez le script à celui-ci:

    plink -ssh username@Ipaddress -pw password perl < C:\Users\path\to\file\LinuxPingScript.pl
Martin Prikryl
la source
Ça a du sens. Pouvez-vous élaborer sur la 1ère option s'il vous plaît? Le script nécessite la lecture de IP_list.txt lors de son exécution pour créer le tableau IP_array. Donc, dans ce scénario, devrais-je télécharger ip_list.txt sur le serveur distant avant de tenter d'exécuter le script? Ou existe-t-il un moyen de demander au script de lire la liste à partir de mon ordinateur local et de m'en donner le résultat? Encore une fois, j'apprécie vraiment l'aide que je fais de mon mieux pour apprendre cela.
HempKnight le
Si vous modifiez le script pour lire la liste à partir de son entrée standard, vous pouvez faire: plink -ssh username@Ipaddress -pw password perl ./LinuxPingScript.pl < IP_list.txt(où IP_list.txtest un fichier local).
Martin Prikryl le
Merci encore Martin pour la réponse. Pour la méthode indiquée ci-dessus: "plink -ssh nom d'utilisateur @ Ipaddress -pw mot_passe perl ./LinuxPingScript.pl <IP_list.txt (où IP_list.txt est un fichier local)." Est-ce que IP_list.txt doit vivre sur le serveur linux dans lequel je suis ssh'd? ou cela fonctionnera-t-il toujours si le fichier IP_list.txt se trouve sur la machine Windows locale sur laquelle je suis en train d'établir la connexion?
HempKnight le
Mon commentaire dit déjà cela: "où se IP_list.txttrouve un fichier local " * == sur votre machine Windows locale - voilà le but de mon commentaire.
Martin Prikryl
J'ai essayé d'expliquer que j'étais nouveau dans ce domaine et j'ai donc demandé des éclaircissements. Si c'était clair monsieur je n'aurais pas demandé. J'apprécie beaucoup votre aide pour m'aider à comprendre cela
HempKnight