1
0
mirror of https://github.com/ARM-software/devlib.git synced 2025-09-05 19:41:53 +01:00

TelnetConnction: splitting from SshConnection

Perviously, a parameter passed into SshConnection controlled whether the
connection was established over SSH or Telnet. Now, there is a separate
class for Telnet connections.
This commit is contained in:
Sergei Trofimov
2016-12-08 11:48:41 +00:00
parent 1ed29a8385
commit b3cea0c0d2
3 changed files with 57 additions and 11 deletions

View File

@@ -19,4 +19,4 @@ from devlib.trace.ftrace import FtraceCollector
from devlib.host import LocalConnection
from devlib.utils.android import AdbConnection
from devlib.utils.ssh import SshConnection
from devlib.utils.ssh import SshConnection, TelnetConnection

View File

@@ -50,7 +50,7 @@ def ssh_get_shell(host, username, password=None, keyfile=None, port=None, timeou
if telnet:
if keyfile:
raise ValueError('keyfile may not be used with a telnet connection.')
conn = TelnetConnection(original_prompt=original_prompt)
conn = TelnetPxssh(original_prompt=original_prompt)
else: # ssh
conn = pxssh.pxssh()
@@ -74,11 +74,11 @@ def ssh_get_shell(host, username, password=None, keyfile=None, port=None, timeou
return conn
class TelnetConnection(pxssh.pxssh):
class TelnetPxssh(pxssh.pxssh):
# pylint: disable=arguments-differ
def __init__(self, original_prompt):
super(TelnetConnection, self).__init__()
super(TelnetPxssh, self).__init__()
self.original_prompt = original_prompt or r'[#$]'
def login(self, server, username, password='', login_timeout=10,
@@ -165,7 +165,7 @@ class SshConnection(object):
self.password_prompt = password_prompt if password_prompt is not None else self.default_password_prompt
logger.debug('Logging in {}@{}'.format(username, host))
timeout = timeout if timeout is not None else self.default_timeout
self.conn = ssh_get_shell(host, username, password, self.keyfile, port, timeout, telnet, original_prompt)
self.conn = ssh_get_shell(host, username, password, self.keyfile, port, timeout, False, None)
def push(self, source, dest, timeout=30):
dest = '{}@{}:{}'.format(self.username, self.host, dest)
@@ -276,6 +276,29 @@ class SshConnection(object):
raise TimeoutError(e.command.replace(pass_string, ''), e.output)
class TelnetConnection(SshConnection):
def __init__(self,
host,
username,
password=None,
port=None,
timeout=None,
password_prompt=None,
original_prompt=None,
):
self.host = host
self.username = username
self.password = password
self.port = port
self.keyfile = None
self.lock = threading.Lock()
self.password_prompt = password_prompt if password_prompt is not None else self.default_password_prompt
logger.debug('Logging in {}@{}'.format(username, host))
timeout = timeout if timeout is not None else self.default_timeout
self.conn = ssh_get_shell(host, username, password, None, port, timeout, True, original_prompt)
def _give_password(password, command):
if not sshpass:
raise HostError('Must have sshpass installed on the host in order to use password-based auth.')