I want to connect to a remote server and run some commands there. For that I am writing the following Ruby script and it works fine.
@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
But when I try to put the same code in an initialize
block it is not working. Below is the code for that:
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
Printing @ssh
gives different results in first and second chunk of code.
Can some one help me in figuring out what's going wrong?
Problem was that I did not initialize
@cmd
ininitialize
block. That is why it was not working as expected. I fixed it as recommended by @ptierno. Below is the working code: