RubyからRTX1300へSSH接続して設定ファイルを表示するための備忘録です。
本来はnet-ssh
のみで実装する予定だったんですが、RTX1300のSSHサーバがRFC4254のSec 6.5にあるexecを実装していないようで、
open_channelを使って書く必要がありました。
既に似たようなことをやっているnet-ssh-telnet
で軽い動作確認をした時のコードになります。
正直に言ってSSHして設定ファイルを表示する だけなら、expectコマンドを使ってシェルで書いた方が早いです。
コード
net-sshとnet-ssh-telnetを使っています。
パスワード認証のサンプルなので公開鍵はnet-ssh
のコードを見ながら変更してください。
require 'net/ssh' require 'net/ssh/telnet' # 環境に応じて書き換える host = '192.168.100.1' user = 'hoge' pass = 'fuga' ssh_options = { host_name: host, user: user, password: pass, } ssh = Net::SSH.start(nil, nil, ssh_options) telnet = Net::SSH::Telnet.new( 'Session' => ssh, 'Prompt' => /^>\s+$/, ) # エンコードを指定 # 設定する値はドキュメントを見てバージョンにあった値を設定 # http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/setup/console_character.html telnet.cmd('console character en.ascii') # show configなどで一定行が表示される場合にページングされるのを防ぐ # これを実行しないとnet-ssh-telnetが待機状態になったままになる telnet.cmd('console lines infinity') # show configの実行結果を表示する # net-ssh-telnetだと、最後に`> `が表示されてしまうので注意 puts telnet.cmd('show config')
特筆することはないのですが、以下2つの設定を実行するようにしておくと、
止まったまま全然動かないなと思うこともも少なくなるはずです。
# エンコードを指定 # 設定する値はドキュメントを見てバージョンにあった値を設定 # http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/setup/console_character.html telnet.cmd('console character en.ascii') # show configなどで一定行が表示される場合にページングされるのを防ぐ # これを実行しないとnet-ssh-telnetが待機状態になったままになる telnet.cmd('console lines infinity')
また、何故エラーが出ているのかが分からない場合は、ssh_options
にverbose
を追加するとデバッグ情報がみれます。
ssh_options = { host_name: host, user: user, password: pass, verbose: :debug, }