Class: Shaddox::Server::SSHActor

Inherits:
Actor
  • Object
show all
Defined in:
lib/shaddox/target.rb

Instance Method Summary collapse

Constructor Details

#initialize(host, user, ssh_opts, &block) ⇒ SSHActor

Returns a new instance of SSHActor.



117
118
119
120
121
122
# File 'lib/shaddox/target.rb', line 117

def initialize(host, user, ssh_opts, &block)
  Net::SSH.start(host, user, ssh_opts) do |ssh|
    @ssh = ssh
    super(&block)
  end
end

Instance Method Details

#exec(command, opts = {}) ⇒ Object



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/shaddox/target.rb', line 123

def exec(command, opts = {})
  require 'highline/import'
  exit_code = nil
  @ssh.open_channel do |channel|
    channel.request_pty do |c, success|
      raise "SSH could not obtain a pty." unless success
      channel.exec(command)
      channel.on_data do |c_, data|
        if data =~ /\[sudo\]/ || data =~ /Password/i
          warn "Target is asking for password: ", 1
          $stdout.print data
          pass = ask("") { |q| q.echo = false }
          channel.send_data "#{pass}\n"
        else
          $stdout.print data unless opts[:quiet]
        end
      end
      channel.on_request('exit-status') do |ch, data|
        exit_code = data.read_long
      end
    end
  end
  @ssh.loop
  exit_code == 0 ? true : false
end

#write_file(content, dest_path) ⇒ Object



148
149
150
151
# File 'lib/shaddox/target.rb', line 148

def write_file(content, dest_path)
  require 'shellwords'
  exec "echo #{Shellwords.shellescape(content)} > #{dest_path}"
end