Added handling of an AssertionError from pxssh failed login (#7750)

* Added handling of an AssertionError from pxssh failed login

* Destory and re-create pxssh instance, to fix behavior upon router restart.
This commit is contained in:
Lev Aronsky 2017-05-29 12:22:20 +03:00 committed by Fabian Affolter
parent eff619a58f
commit 8fcc750998
1 changed files with 10 additions and 3 deletions

View File

@ -296,11 +296,9 @@ class SshConnection(_Connection):
def __init__(self, host, port, username, password, ssh_key, ap):
"""Initialize the SSH connection properties."""
from pexpect import pxssh
super(SshConnection, self).__init__()
self._ssh = pxssh.pxssh()
self._ssh = None
self._host = host
self._port = port
self._username = username
@ -348,9 +346,16 @@ class SshConnection(_Connection):
_LOGGER.error("Unexpected SSH error: %s", str(err))
self.disconnect()
return None
except AssertionError as err:
_LOGGER.error("Connection to router unavailable: %s", str(err))
self.disconnect()
return None
def connect(self):
"""Connect to the ASUS-WRT SSH server."""
from pexpect import pxssh
self._ssh = pxssh.pxssh()
if self._ssh_key:
self._ssh.login(self._host, self._username,
ssh_key=self._ssh_key, port=self._port)
@ -367,6 +372,8 @@ class SshConnection(_Connection):
self._ssh.logout()
except Exception:
pass
finally:
self._ssh = None
super(SshConnection, self).disconnect()