Class: Oxidized::SSH

Inherits:
Input
  • Object
show all
Includes:
Input::CLI
Defined in:
lib/oxidized/input/ssh.rb

Defined Under Namespace

Classes: NoShell

Constant Summary collapse

RescueFail =
{
  :debug => [
    Net::SSH::Disconnect,
  ],
  :warn => [
    RuntimeError,
    Net::SSH::AuthenticationFailed,
  ],
}

Instance Attribute Summary

Attributes included from Input::CLI

#node

Instance Method Summary collapse

Methods included from Input::CLI

#connect_cli, #disconnect_cli, #get, #initialize, #password, #post_login, #pre_logout, #username

Methods included from Config::Vars

#vars

Instance Method Details

#cmd(cmd, expect = node.prompt) ⇒ Object



50
51
52
53
54
55
56
57
# File 'lib/oxidized/input/ssh.rb', line 50

def cmd cmd, expect=node.prompt
  Oxidized.logger.debug "SSH: #{cmd} @ #{node.name}"
  if @exec
    @ssh.exec! cmd
  else
    cmd_shell(cmd, expect).gsub(/\r\n/, "\n")
  end
end

#connect(node) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/oxidized/input/ssh.rb', line 19

def connect node
  @node       = node
  @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?
  port = vars(:ssh_port) || 22
  if proxy_host = vars(:proxy)
    proxy =  Net::SSH::Proxy::Command.new("ssh #{proxy_host} nc %h %p")
  end
  @ssh = Net::SSH.start(@node.ip, @node.auth[:username], :port => port.to_i,
                        :password => @node.auth[:password], :timeout => Oxidized.config.timeout,
                        :paranoid => secure,
                        :auth_methods => %w(none publickey password keyboard-interactive),
                        :number_of_password_prompts => 0,
                        :proxy => proxy)
  unless @exec
    shell_open @ssh
    begin
      @username ?  : expect(@node.prompt)
    rescue Timeout::Error
      raise PromptUndetect, [ @output, 'not matching configured prompt', @node.prompt ].join(' ')
    end
  end
  connected?
end

#connected?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/oxidized/input/ssh.rb', line 46

def connected?
  @ssh and not @ssh.closed?
end

#outputObject



63
64
65
# File 'lib/oxidized/input/ssh.rb', line 63

def output
  @output
end

#send(data) ⇒ Object



59
60
61
# File 'lib/oxidized/input/ssh.rb', line 59

def send data
  @ses.send_data data
end