module Gusteau::SSH
Public Instance Methods
conn()
click to toggle source
# File lib/gusteau/ssh.rb, line 9 def conn @conn ||= begin opts = { :port => port } opts.update(:password => password) if @password log "#setting up ssh connection #{@user}@#{host}, #{opts.inspect})" do Net::SSH.start(host, @user, opts) end end end
send_command(cmd)
click to toggle source
# File lib/gusteau/ssh.rb, line 19 def send_command(cmd) exit_code = -1 conn.open_channel do |ch| ch.exec(prepared_cmd cmd) do |_, success| if success ch.on_data { |_,data| puts data } ch.on_extended_data { |_,_,data| $stderr.puts data } ch.on_request("exit-status") { |_,data| exit_code = data.read_long } else raise "FAILED to execute command: #{cmd.inspect}" end end end conn.loop exit_code == 0 end
send_files(files, dest_dir, strip_c = nil)
click to toggle source
# File lib/gusteau/ssh.rb, line 36 def send_files(files, dest_dir, strip_c = nil) strip_arg = strip_c ? "--strip-components=#{strip_c}" : '' conn.open_channel { |ch| ch.exec(prepared_cmd "tar zxf - -C #{dest_dir} #{strip_arg}") ch.send_data(compressed_tar_stream(files)) ch.eof! }.wait end
Private Instance Methods
prepared_cmd(cmd)
click to toggle source
# File lib/gusteau/ssh.rb, line 48 def prepared_cmd(cmd) user == 'root' ? cmd : "sudo -- sh -c '#{cmd}'" end