#contents

* 目的 [#l629e1e8]
リモートホストでSSHサーバが動作している場合に、自動ログインして一定の処理をさせて戻ってくるようにしたい。
たとえば、大量のVMがあり1台づつシャットダウンして回るのが非効率なので、スクリプトで処理させたい、など。

* 導入方法 [#m09b3621]

** インストール [#e1fdddf7]
# Net::OpenSSHとIO::Ptyが必要
 [ubuntu@lxc ~]$ sudo aptitude install libnet-openssh-perl libio-pty-perl


** スクリプト本体 [#l3299498]
 #!/usr/bin/perl
 
 use strict;
 use Net::OpenSSH;
 
 my ($host,$ssh,$buf,$uid,$pwd,$cmd);
 my (@hosts,@bufs);
 
 $uid = "UID";
 $pwd = "PWD";
 
 $ssh = Net::OpenSSH->new( $host, (user=>$uid , password=>$pwd) );
 $ssh->error and die "Can't ssh to : " . $ssh->error;
 
 # コマンドを発行
 $ssh->system("touch /tmp/check") or  die "remote command failed: " . $ssh->error;
 
 # コマンド結果をキャプチャ
 @bufs = $ssh->capture("cat /etc/debian_version");
 $ssh->error and die "remote ls command failed: " . $ssh->error;
 foreach(@bufs){
   print $_;
 }
 
 # コマンド結果をキャプチャ2
 $buf = $ssh->capture({ timeout => 1 }, "cat /proc/cpuinfo");
 $ssh->error and die "remote find command failed: " . $ssh->error;
 print $buf."\n";
 
 exit;


* linuxサーバをsshでシャットダウンする場合 [#gbaff7c1]

** linuxサーバでの設定 [#t38ecf33]
sudoコマンドでパスワードを聞かれないようにしておけばOK

 $ sudo visudo
 ----------8<----------
 # これを最後の行に追加
 UID ALL=NOPASSWD: /sbin/shutdown -h now
 ----------8<----------

** シャットダウンスクリプト [#y73fdcc1]

 #!/usr/bin/perl
 
 use strict;
 use Net::OpenSSH;
 
 my ($host,$ssh,$buf,$uid,$pwd,$cmd);
 my (@hosts,@bufs);
 
 $uid = "UID";
 $pwd = "PWD";
 
 $cmd  = "sudo shutdown -h now";
 
 
 @hosts = qw(192.168.10.1 192.168.10.2 192.168.10.3 192.168.10.4);
 
 foreach $host (@hosts) {
   print "$host : execute...\n";
   if(`ping $host -c 1 -s 1 -w 1 | grep "bytes from"`){
     $ssh = Net::OpenSSH->new( $host, (user=>$uid , password=>$pwd) );
     $ssh->error and die "Can't ssh to : " . $ssh->error;
     $ssh->system($cmd) or  die "remote command failed: " . $ssh->error;
   }else{
     print " ping fail\n";
   }
 }
 
 exit;


* 注意事項 [#fd1f3a8d]
sshで接続しようとする場合、~/.known_hostsにないホストには接続できないっぽいので、あらかじめエントリを作成しておく。または一度ログインすれば自動的に作成される。~
もしくは、/etc/ssh/ssh_config の StrictHostKeyChecking no を追加すると、自動的にキーが追加/更新されるので、これでもよい。
~
~
~
#counter


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS