rubyでssh(Net::SSH)
telnetやssh,ftpなど対話的にコマンドを自動実行するのに、expectやteratermマクロなどを使っていたのですが、rubyにnet-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/ }