harry’s memorandum

おれおれメモ

rubyでssh(Net::SSH)

telnetやssh,ftpなど対話的にコマンドを自動実行するのに、expectやteratermマクロなどを使っていたのですが、rubynet-sshというライブラリがあったので、試してみました。

gemでnet-sshをインストール

まずはgemで必要なライブラリをインストールします。

$ gem install net-ssh
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed net-ssh-2.0.4
Installing ri documentation for net-ssh-2.0.4...
Installing RDoc documentation for net-ssh-2.0.4...

sshでログインしてcat

ヘルプから簡単なサンプルを。
リモートサーバのファイルをcat。

require 'net/ssh'
Net::SSH.start('myhostname', 'myuser', :password => "mypasswod") { |ssh|
  print ssh.exec!("cat /etc/nsswitch.conf")
}

/var/log/auth.logからアクセスエラーを出力。

stdoutとstderrを分けることができるようです。
rootでログインってのはありえないけど、サンプルで/etc/log/auth.log を開いて、sshアクセスエラーのみを出力。

require 'net/ssh'
stdout = []
Net::SSH.start('myhostname', 'root', :password => "rootpassword") { |ssh|
  ssh.exec!("cat /var/log/auth.log") { |channel, stream, data|
    stdout << data if stream == :stdout
  }
}
stdout.each {|s| print s if s =~ /Failed password/ }