web-dev-qa-db-ja.com

Plink.exeを使用してリモートRedHatLinuxサーバーにリモートログオンし、ローカルPerlスクリプトを実行する

長年のメンバー、初めてのポスター。私はこの問題を徹底的に調査しましたが、この特定の問題の解決策を見つけられませんでした。

私は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 password(hostname; pwd; whoami; Perl)-m C:\ Users\path\to\file\LinuxPingScript.pl

上記のコマンドを実行すると、次のエラーが発生します。

bash:-c:行0:予期しないトークンの近くの構文エラー_-m' bash: -c: line 0:_(hostname; Perl)-m C:\ Users\path\to\file\LinuxPingScript.pl`

スクリプトを呼び出す前にインタプリタを起動する別の方法はありますか?それとも、これについて別の方法がありますか?通常PuTTYでアクセスするリモートサーバーからpingテストを実行する必要があります。しかし、これは自動化できるので、Plinkを使用できると思いました。

私はこれにかなり慣れていないので、助けていただければ幸いです。

1
HempKnight

PuTTY/Plink -mスイッチを使用して指定されたファイルをシェルスクリプトにすることはできません。これには、1つずつ実行されるトップレベルのシェルコマンドのリストのみを含めることができます。実際、一部のSSHサーバーは、複数のコマンドをサポートしておらず、1つだけをサポートしています。

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
    
1
Martin Prikryl