Pocket

以前、ホストリスト及びコマンドリストを読み込んで、対象となるホストに自動でログイン、コマンドを実行させるTeratermスクリプトを作成したが、今回はそのPerl版。

なお、このスクリプトは「Net::OpenSSH」というライブラリを使用している。今回スクリプトを実行させるOSはUbuntu、CentOSを使用しているので、そのインストール手順から記述していく。

Net::OpenSSH等ライブラリのインストール

まずはPerlでsshを使用するため、「Net::OpenSSH」のインストールを行う。
以下のコマンドを実行し、「Net::OpenSSH」及び「Capture::Tiny」をcpan経由でインストールさせる。

cpan -i Net::OpenSSH
cpan -i Capture::Tiny

インストールを行う際、設定値の設定を求められるが全て「Enter」で良い。また、その際にURLを求められる事があるが、その時は以下のURLを指定する。

 http://www.cpan.org

以上でインストールが完了する。

設定ファイル

使用する設定ファイルは2つ。
対象のホスト情報を保有するhost.listと、実行するコマンドを記述しているcommand.listで構成される。

●host.list(任意のファイル名)

#HOST_NAME,HOST_IP,HOST_USER,HOST_PASS
AAA,172.26.15.240,aaauser,Password1
BBB,172.26.15.240,bbbuser,Password2
CCC,172.26.15.240,cccuser,Password3
Sponsored Links

●command.list(任意のファイル名)

df -h
free
vmstat
exit

これらは、以前に記述したTeratermマクロと同様のファイルを使用している。

スクリプト

実際のスクリプトがこちら。

●perl_ssh.pl

use Net::OpenSSH;
use Capture::Tiny ':all';
 
open(HOSTLIST_FILE, "< ".$$Argv[0]) or die("error :$!");
 
while (my $Hostline = <HOSTLIST_FILE>){
    next if ($Hostline =~ /^#/);
    chomp($Hostline);
    my @Strline = split(/,/,$Hostline);
    print "\n";
    print "HostName :".$Strline[0]."\n";
    print "IPAddress:".$Strline[1]."\n";
    print "UserName :".$Strline[2]."\n";
    print "PassWord :".$Strline[3]."\n";
    print "\n";
 
    my $Ssh = Net::OpenSSH->new(
        "$Strline[1]",
         user => "$Strline[2]",
         password => "$Strline[3]",
         master_opts => [ -o => "StrictHostKeyChecking=no"] 
         );
 
    $Ssh->error and die "unable to connect to remote host: ". $Ssh->error;
    open(COMMANDLIST_FILE, "< ".$$Argv[1]) or die("error :$!");
    while (my $Commandline = <COMMANDLIST_FILE>){
            my ($Stdout, $Stderr, $Result) = tee sub {
            $Ssh->system($Commandline);
           }
    }
}

本プログラムは、引数でhost.listおよびcommand.listを指定して実行させる。

perl_ssh.pl host.list command.list

これでPerlでのSSH自動接続、コマンド実行スクリプトが完成。
ログの管理については特に作成していないので、その辺りはお好みで対応してもらいたい。

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。