当连接失败时,使用Ruby的Net :: SSH gem避免僵尸进程

时间:2014-08-26 17:02:35

标签: ruby ssh gem

我有一个应用程序可以使用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身份连接失败,第二个也是如此。

当父进程结束时,这些僵尸会消失,但我想知道如果我们知道连接失败,如何(如果可能的话)摆脱僵尸。

0 个答案:

没有答案