检查 paramiko ssh 连接是否仍然存在

Check if paramiko ssh connection is still alive

有没有办法检查 paramiko SSH 连接是否仍然存在?

In [1]: import paramiko

In [2]: ssh = paramiko.SSHClient() 

In [3]: ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

In [4]: ssh.connect(hostname)

我想模仿这样的东西(目前不存在)

In [5]: ssh.isalive()
True
 if ssh.get_transport() is not None:
     ssh.get_transport().is_active()

应该这样做....假设我没看错docs

我观察到 is_active() 返回误报。

我会推荐使用这件作品:

  # use the code below if is_active() returns True
  try:
      transport = client.get_transport()
      transport.send_ignore()
  except EOFError, e:
      # connection is closed

对我来说,上面的答案不起作用,所以我通过发送 exec_command() 超时来完成:

self.ssh.exec_command('ls', timeout=5)

例如,完整的方法如下:

def check_connection(self):
    """
    This will check if the connection is still availlable.

    Return (bool) : True if it's still alive, False otherwise.
    """
    try:
        self.ssh.exec_command('ls', timeout=5)
        return True
    except Exception as e:
        print "Connection lost : %s" %e
        return False

我每 5 秒左右调用一次。