2015年2月22日日曜日

rubyで遠隔地のRTX-1200/1100を監視しよう

従来 rubyでNet::Telnetなんかを使ってARPテーブルの監視や動的なIPフィルタリング等をしていた。あとはSNMP関連なども

でも、それはローカルネットワークだから良かった話。遠隔地のルータを監視しようと思うと生パスワードが飛び交うのはイヤだし、通信内容も暗号化したい。

というわけで、Net::SSHを gem install net-sshしてサンプルコードを見ながら、遠隔地のRTX-1200に向けて
   ssh.exec! 'show arp lan1'
等としてみるのだが、closed stream (IOError)等と言われてうまく動作しない。
試しにコマンド部分を 'ls /etc'に変えて最寄りのunixマシンに投げると動くので、rubyのコード自体はさほど間違ってないはず。

おっかしいなぁと思って、シェル上からssh user@router 'show arp lan1'を投入してみると、Channel request 'exec' is not supported !!
そう、YAMAHAのRTXシリーズのsshではexecは効かないのであった。

代替策として、 gem install net-ssh-telnetして
require 'rubygems'
require 'net/ssh'
require 'net/ssh/telnet'

s = Net::SSH::Telnet.new(
          "Dump_log" => "/dev/null",   # /dev/stdout would be work for debug
          "Host" => @remotehostname,
          "Username" => @user,
          "Password" => @password
)

arp_string = s.cmd("show arp lan1")

のようにして解決したのであった