スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

外部のホストからコマンドの結果を取得する

例えば外部のホストからshow connの結果を取得したいとき。

Cisco機器の
・IPアドレス:192.168.1.1
・ログインユーザ:hoge_user
・パスワード:hoge_password
とすると、
#!/usr/bin/ruby

require 'pty'
require 'expect'

module Expect
  def spawn(cmd)
    $expect_verbose = true

    PTY.spawn(cmd) do |r, w, pid|
      @input_stream = r
      @output_stream = w
      @child_pid = pid
      yield
    end
  end

  def expect(pattern, timeout = 10)
    ret = @input_stream.expect(pattern, timeout) do |match|
      raise "expect %s timeout " % (pattern.kind_of?(Regexp)? pattern.source : pattern) unless match
      put_cmd(yield(match))
    end
  end

  private
  def put_cmd(cmd)
    @output_stream.puts(cmd)
  end
end

class SshSession
  include Expect
  def getConnTbl
    spawn("ssh -l hoge_user 192.168.1.1") do
      begin
        expect(/hoge_user@192.168.1.1's password:/){|match| "hoge_password"}
        expect(/prompt>/){|match| "show conn"}
        expect(/prompt>/){|match| "exit"}
      rescue
        puts "ERROR"
      end
    end
  end
end

ss = SshSession.new
ss.getConnTbl

この記事のトラックバックURL

http://ysmt.blog21.fc2.com/tb.php/217-65d59808

コメント

コメントする

管理者にだけ表示を許可する

Template Designed by DW99

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。