Использование 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