Class: Oxidized::SSH
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
#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 ? shell_login : expect(@node.prompt)
rescue Timeout::Error
raise PromptUndetect, [ @output, 'not matching configured prompt', @node.prompt ].join(' ')
end
end
connected?
end
|
#connected? ⇒ Boolean
46
47
48
|
# File 'lib/oxidized/input/ssh.rb', line 46
def connected?
@ssh and not @ssh.closed?
end
|
#output ⇒ Object
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
|