class Spectre::SSH::SSHConnection
Public Class Methods
new(host, username, opts, logger)
click to toggle source
# File lib/spectre/ssh.rb, line 11 def initialize host, username, opts, logger opts[:non_interactive] = true @__logger = logger @__host = host @__username = username @__opts = opts @__session = nil @__exit_code = nil @__output = '' end
Public Instance Methods
can_connect?()
click to toggle source
# File lib/spectre/ssh.rb, line 43 def can_connect? @__output = nil begin connect! @__session.open_channel.close @__output = "successfully connected to #{@__host} with user #{@__username}" @__exit_code = 0 return true rescue Exception => e @__logger.error e.message @__output = "unable to connect to #{@__host} with user #{@__username}" @__exit_code = 1 end return false end
close()
click to toggle source
# File lib/spectre/ssh.rb, line 38 def close return unless @__session and not @__session.closed? @__session.close end
connect!()
click to toggle source
# File lib/spectre/ssh.rb, line 33 def connect! return unless @__session == nil or @__session.closed? @__session = Net::SSH.start(@__host, @__username, @__opts) end
exec(command)
click to toggle source
# File lib/spectre/ssh.rb, line 61 def exec command connect! log_str = "#{@__session.options[:user]}@#{@__session.host} -p #{@__session.options[:port]} #{command}" @channel = @__session.open_channel do |channel| channel.exec(command) do |ch, success| abort "could not execute #{command} on #{@__session.host}" unless success @__output = '' channel.on_data do |ch, data| @__output += data end channel.on_extended_data do |ch,type,data| @__output += data end channel.on_request('exit-status') do |ch, data| @__exit_code = data.read_long end # channel.on_request('exit-signal') do |ch, data| # exit_code = data.read_long # end end end @channel.wait @__session.loop log_str += "\n" + @__output @__logger.info log_str end
exit_code()
click to toggle source
# File lib/spectre/ssh.rb, line 102 def exit_code @__exit_code end
file_exists(path)
click to toggle source
# File lib/spectre/ssh.rb, line 23 def file_exists path exec "ls #{path}" exit_code == 0 end
output()
click to toggle source
# File lib/spectre/ssh.rb, line 98 def output @__output end
owner_of(path)
click to toggle source
# File lib/spectre/ssh.rb, line 28 def owner_of path exec "stat -c %U #{path}" output.chomp end