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

时间:2015-02-02 23:06:46

标签: python ssh paramiko

有没有办法检查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

3 个答案:

答案 0 :(得分:10)

我观察到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

答案 1 :(得分:9)

 if ssh.get_transport() is not None:
     ssh.get_transport().is_active()

应该这样做....假设我读了docs权利。

答案 2 :(得分:2)

对我而言,上述答案并不起作用,所以我通过发送带有超时的 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秒左右调用一次。