From f8be9c5a3597768128d70209daf4d40e527a7880 Mon Sep 17 00:00:00 2001 From: Saku Ytti Date: Wed, 5 Mar 2014 13:54:36 +0200 Subject: Add AireOS support Crappy Cisco WLC 5k, much quality, very implementation, such secure * stop pre_logout from expecting prompt by default --- lib/oxidized/input/cli.rb | 12 +++++++++++- lib/oxidized/input/ssh.rb | 17 ++++++++++++++--- lib/oxidized/input/telnet.rb | 8 -------- 3 files changed, 25 insertions(+), 12 deletions(-) (limited to 'lib/oxidized/input') diff --git a/lib/oxidized/input/cli.rb b/lib/oxidized/input/cli.rb index ab93b06..2e6ac35 100644 --- a/lib/oxidized/input/cli.rb +++ b/lib/oxidized/input/cli.rb @@ -5,6 +5,7 @@ module Oxidized def initialize @post_login = [] @pre_logout = [] + @username, @password, @exec = nil end def get @@ -15,7 +16,7 @@ module Oxidized end def disconnect_cli - @pre_logout.each { |command, block| block ? block.call : (cmd command) } + @pre_logout.each { |command, block| block ? block.call : (cmd command, nil) } end def post_login _post_login=nil, &block @@ -29,6 +30,15 @@ module Oxidized @pre_logout << [_pre_logout, block] end end + + def username re=/^(Username|login)/ + @username or @username = re + end + + def password re=/^Password/ + @password or @password = re + end + end end end diff --git a/lib/oxidized/input/ssh.rb b/lib/oxidized/input/ssh.rb index a0a5916..ef15292 100644 --- a/lib/oxidized/input/ssh.rb +++ b/lib/oxidized/input/ssh.rb @@ -23,7 +23,10 @@ module Oxidized @ssh = Net::SSH.start @node.ip, @node.auth[:username], :password => @node.auth[:password], :timeout => CFG.timeout, :paranoid => secure - open_shell @ssh unless @exec + unless @exec + shell_open @ssh + @username ? shell_login : expect(@node.prompt) + end @ssh and not @ssh.closed? end @@ -55,7 +58,7 @@ module Oxidized end end - def open_shell ssh + def shell_open ssh @ses = ssh.open_channel do |ch| ch.on_data do |ch, data| @output << data @@ -68,7 +71,15 @@ module Oxidized end end end - expect @node.prompt + end + + # Cisco WCS has extremely dubious SSH implementation, SSH auth is always + # success, it always opens shell and then run auth in shell. I guess + # they'll never support exec() :) + def shell_login + expect username + cmd @node.auth[:username], password + cmd @node.auth[:password] end def exec state=nil diff --git a/lib/oxidized/input/telnet.rb b/lib/oxidized/input/telnet.rb index 26df113..84d9877 100644 --- a/lib/oxidized/input/telnet.rb +++ b/lib/oxidized/input/telnet.rb @@ -48,14 +48,6 @@ module Oxidized end end - def username re=/^(Username|login)/ - @username or @username = re - end - - def password re=/^Password/ - @password or @password = re - end - end end -- cgit v1.2.1