I have a snippet of code, simply trying to execute a script on a remote server, in the event that it fails, I\'d like to make a follow-up call, imagine this:
req
For newer versions of Net::SSH, you can just pass a status hash to Net::SSH::Connection::Session#exec
:
status = {}
Net::SSH.start(hostname, user, options) do |ssh|
channel = ssh.exec(command, status: status)
channel.wait # wait for the command to actually be executed
end
puts status.inspect
# {:exit_code=>0}
By default, exec
streams its output to $stdout
and $stderr
. You can pass a block to exec
to do something different, a la:
ssh.exec(command, status: status) do |ch, stream, data|
if stream == :stdout
do_something_with_stdout(data)
else
do_something_with_stderr(data)
end
end
This works on 6.1.0 - not sure about availability for older versions. See http://net-ssh.github.io/net-ssh/Net/SSH/Connection/Session.html#method-i-exec for more details.