1

Давний участник, первый раз постер. Я тщательно исследовал эту проблему, но я не нашел решения этой конкретной проблемы.

Я работаю в NOC и отвечаю за мониторинг серверов. Время от времени я получаю списки рассылки с сотнями IP-адресов, которые мне нужно проверить и получить статус отчета.

Исследуя эту проблему, я нашел этот скрипт, который, кажется, будет делать именно то, что мне нужно.

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

Я открываю командную строку на моем локальном компьютере с 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 (это было чтобы запустить интерпретатор perl на удаленном сервере, прежде чем вызывать скрипт с ключом -m)

Я получаю выходные данные из первых 3 команд, затем под результатами команды whoami я получаю мигающий курсор.

Итак, теперь я пытаюсь установить путь к локальному скрипту, который вы видите опубликованным выше:

plink -ssh username @ Ipaddress -pw пароль (имя хоста; pwd; whoami; perl) -m C:\Users\ путь \ к \ файлу \ LinuxPingScript.pl

Когда я запускаю вышеупомянутую команду, я получаю эту ошибку:

bash: -c: строка 0: синтаксическая ошибка рядом с неожиданным токеном -m' bash: -c: line 0:(имя хоста; perl) -m C:\Users\path\to\file\LinuxPingScript.pl`

Есть ли другой способ запустить интерпретатор, прежде чем я вызову скрипт? Или есть другой способ сделать это? Я должен запустить тест ping с удаленного сервера, к которому я обычно обращаюсь через Putty. Но я подумал, что поскольку это можно автоматизировать, я мог бы использовать Plink.

Я довольно новичок в этом и был бы признателен за любую помощь, которую я могу получить.

1 ответ1

1

Файл, указанный с помощью параметра PuTTY/Plink -m не может быть сценарием оболочки. Он может содержать только список команд оболочки верхнего уровня, которые выполняются одна за другой. И на самом деле некоторые 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
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .