Проверьте, живо ли соединение paramiko ssh

есть ли способ проверить, если 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 ответов


 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)

для exemple полный метод будет выглядеть так:

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 секунд.