我有一个应用程序可以使用Ruby的Net :: SSH gem做这样的事情:
key = '/home/creede/.ssh/secret.pem'
conn = nil
begin
conn = Net::SSH::start('example.com','creede',:timeout=>60,:keys=>[key])
rescue
begin
conn = Net::SSH::start('example.com','root',:timeout=>60,:keys=>[key])
rescue Exception => e
puts "Can't connect to example.com: #{e.to_s}"
if not conn.nil?
if not conn.closed?
conn.close
end
end
end
end
issue = conn.exec!('cat /etc/issue')
conn.close
第一次连接服务器时,一切顺利。但是,如果服务器需要以root身份登录,因为第一次尝试连接失败,第一次尝试的ssh进程就变成了僵尸。如果以root身份连接失败,第二个也是如此。
当父进程结束时,这些僵尸会消失,但我想知道如果我们知道连接失败,如何(如果可能的话)摆脱僵尸。