diff options
Diffstat (limited to 'lib/oxidized/input')
| -rw-r--r-- | lib/oxidized/input/cli.rb | 3 | ||||
| -rw-r--r-- | lib/oxidized/input/ftp.rb | 2 | ||||
| -rw-r--r-- | lib/oxidized/input/ssh.rb | 35 | ||||
| -rw-r--r-- | lib/oxidized/input/telnet.rb | 2 | 
4 files changed, 27 insertions, 15 deletions
| diff --git a/lib/oxidized/input/cli.rb b/lib/oxidized/input/cli.rb index fc7f426..660e173 100644 --- a/lib/oxidized/input/cli.rb +++ b/lib/oxidized/input/cli.rb @@ -14,6 +14,9 @@ module Oxidized          d = node.model.get          disconnect          d +      rescue PromptUndetect +        disconnect +        raise        end        def connect_cli diff --git a/lib/oxidized/input/ftp.rb b/lib/oxidized/input/ftp.rb index c6d644c..80de257 100644 --- a/lib/oxidized/input/ftp.rb +++ b/lib/oxidized/input/ftp.rb @@ -18,7 +18,7 @@ module Oxidized      def connect node        @node       = node        @node.model.cfg['ftp'].each { |cb| instance_exec(&cb) } -      @log = File.open(Oxidized::Config::Log + "-#{@node.ip}-ftp", 'w') if Oxidized.config.input.debug? +      @log = File.open(Oxidized::Config::Log + "/#{@node.ip}-ftp", 'w') if Oxidized.config.input.debug?        @ftp = Net::FTP.new @node.ip, @node.auth[:username], @node.auth[:password]        connected?      end diff --git a/lib/oxidized/input/ssh.rb b/lib/oxidized/input/ssh.rb index db39a7e..c0b7cf9 100644 --- a/lib/oxidized/input/ssh.rb +++ b/lib/oxidized/input/ssh.rb @@ -21,7 +21,7 @@ module Oxidized        @output     = ''        @node.model.cfg['ssh'].each { |cb| instance_exec(&cb) }        secure = Oxidized.config.input.ssh.secure -      @log = File.open(Oxidized::Config::Log + "-#{@node.ip}-ssh", 'w') if Oxidized.config.input.debug? +      @log = File.open(Oxidized::Config::Log + "/#{@node.ip}-ssh", 'w') if Oxidized.config.input.debug?        port = vars(:ssh_port) || 22        if proxy_host = vars(:ssh_proxy)          proxy =  Net::SSH::Proxy::Command.new("ssh #{proxy_host} -W %h:%p") @@ -42,7 +42,7 @@ module Oxidized        unless @exec          shell_open @ssh          begin -          @username ? shell_login : expect(@node.prompt) +          login          rescue Timeout::Error            raise PromptUndetect, [ @output, 'not matching configured prompt', @node.prompt ].join(' ')          end @@ -102,17 +102,22 @@ module Oxidized        end      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] +    # some models have SSH auth or terminal auth based on version of code +    # if SSH is configured for terminal auth, we'll still try to detect prompt +    def login +      if @username +        match = expect username, @node.prompt +        if match == username +          cmd @node.auth[:username], password +          cmd @node.auth[:password] +        end +      else +        expect @node.prompt +      end      end      def exec state=nil -      state == nil ? @exec : (@exec=state) +      state == nil ? @exec : (@exec=state) unless vars :ssh_no_exec      end      def cmd_shell(cmd, expect_re) @@ -123,14 +128,18 @@ module Oxidized        @output      end -    def expect regexp -      Oxidized.logger.debug "lib/oxidized/input/ssh.rb: expecting #{regexp.inspect} at #{node.name}" +    def expect *regexps +      regexps = [regexps].flatten +      Oxidized.logger.debug "lib/oxidized/input/ssh.rb: expecting #{regexps.inspect} at #{node.name}"        Timeout::timeout(Oxidized.config.timeout) do          @ssh.loop(0.1) do            sleep 0.1 -          not @output.match regexp +          match = regexps.find { |regexp| @output.match regexp } +          return match if match +          true          end        end      end +    end  end diff --git a/lib/oxidized/input/telnet.rb b/lib/oxidized/input/telnet.rb index 3446ca2..a5561b9 100644 --- a/lib/oxidized/input/telnet.rb +++ b/lib/oxidized/input/telnet.rb @@ -16,7 +16,7 @@ module Oxidized                'Port'    => port.to_i,                'Timeout' => @timeout,                'Model'   => @node.model } -      opt['Output_log'] = Oxidized::Config::Log + "-#{@node.ip}-telnet" if Oxidized.config.input.debug? +      opt['Output_log'] = Oxidized::Config::Log + "/#{@node.ip}-telnet" if Oxidized.config.input.debug?        @telnet  = Net::Telnet.new opt        if @node.auth[:username] and @node.auth[:username].length > 0 | 
