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:
@@ -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
|
||||
|
@@ -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.')
|
||||
|
Reference in New Issue
Block a user