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.
Réponses:
Le fichier spécifié à l'aide du
-m
commutateur 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
Exécutez Perl sur le serveur et envoyez le script à celui-ci:
la source
plink -ssh username@Ipaddress -pw password perl ./LinuxPingScript.pl < IP_list.txt
(oùIP_list.txt
est un fichier local).IP_list.txt
trouve un fichier local " * == sur votre machine Windows locale - voilà le but de mon commentaire.