Использование Net::SSH в блоке `initialize` не работает

Я хочу подключиться к удаленному серверу и выполнить там несколько команд. Для этого я пишу следующий скрипт на Ruby, и он отлично работает.

@hostname = "SERVER_NAME"
@username = "user"
@password = "pass"
@cmd = "ls -alt"

begin
  @ssh = Net::SSH.start(@hostname, @username, :password => @password)
  puts "#{@ssh}"
  res = @ssh.exec!(@cmd)
  @ssh.close
  puts res
rescue
  puts "Unable to connect to #{@hostname} using #{@username}/#{@password}"
end

Но когда я пытаюсь поставить тот же код в initialize Блок это не работает. Ниже приведен код для этого:

def initialize(hostname, user, password)
  @hostname = "#{hostname}"
  @username = "#{user}"
  @password = "#{password}"

  begin
    puts "entered begin"
    @ssh = Net::SSH.start(@hostname, @username, :password => @password)
    puts "#{@ssh}"
    res = @ssh.exec!(@cmd)
    puts "#{res}"
    # @ssh.close
    puts res
  rescue => e
    puts e
    puts "#{@ssh} Unable to connect to #{@hostname} using #{@username}/#{@password}"
  end
end

печать @ssh дает разные результаты в первом и втором фрагменте кода.

Может ли кто-нибудь помочь мне понять, что происходит не так?

1 ответ

Проблема была в том, что я не инициализировал @cmd в initialize блок. Вот почему это не сработало, как ожидалось. Я исправил это как рекомендовано @ptierno. Ниже приведен рабочий код:

def initialize(hostname, user, password)
  @hostname = "#{hostname}"
  @username = "#{user}"
  @password = "#{password}"
  @cmd = "ls -alt"

  begin
    puts "entered begin"
    @ssh = Net::SSH.start(@hostname, @username, :password => @password)
    puts "#{@ssh}"
    res = @ssh.exec!(@cmd)
    puts "#{res}"
    # @ssh.close
    puts res
  rescue => e
    puts e
    puts "#{@ssh} Unable to connect to #{@hostname} using #{@username}/#{@password}"
  end
end
Другие вопросы по тегам