class KuberKit::Shell::SshSession
Constants
- SshSessionError
Attributes
host[R]
port[R]
session[R]
user[R]
Public Class Methods
new(host:, user:, port:)
click to toggle source
# File lib/kuber_kit/shell/ssh_session.rb, line 8 def initialize(host:, user:, port:) @host = host @user = user @port = port @session = Net::SSH.start(host, user, {port: port}) end
Public Instance Methods
connected?()
click to toggle source
# File lib/kuber_kit/shell/ssh_session.rb, line 15 def connected? !!@session end
disconnect()
click to toggle source
# File lib/kuber_kit/shell/ssh_session.rb, line 19 def disconnect return unless connected? @session.close @session = nil end
exec!(command)
click to toggle source
# File lib/kuber_kit/shell/ssh_session.rb, line 25 def exec!(command) stdout_data = '' stderr_data = '' exit_code = nil channel = session.open_channel do |ch| ch.exec(command) do |ch, success| if !success raise SshSessionError, "Shell command failed: #{command}\r\n#{stdout_data}\r\n#{stderr_data}" end channel.on_data do |ch,data| stdout_data += data end channel.on_extended_data do |ch,type,data| stderr_data += data end channel.on_request('exit-status') do |ch,data| exit_code = data.read_long end end end channel.wait session.loop stdout_data = stdout_data.chomp.strip if exit_code != 0 raise SshSessionError, "Shell command failed: #{command}\r\n#{stdout_data}\r\n#{stderr_data}" end stdout_data rescue Net::SSH::Exception => e raise SshSessionError, "Shell command failed: #{command}\r\n#{e.message}" end