1
0
mirror of https://github.com/ARM-software/devlib.git synced 2025-01-31 02:00:45 +00:00

utils/ssh: Allow SSH to use SCP as a file transfer method

Paramiko uses sftp for file transfer rather then scp as with the
previous implementation however not all targets support this.
Expose a parameter to the SSHConnection to allow falling back to
the scp implementation.
This commit is contained in:
Marc Bonnici 2020-05-13 10:27:47 +01:00
parent b941c6c5a6
commit cfb28c47c0

View File

@ -359,6 +359,7 @@ class SshConnection(SshConnectionBase):
platform=None, platform=None,
sudo_cmd="sudo -S -- sh -c {}", sudo_cmd="sudo -S -- sh -c {}",
strict_host_check=True, strict_host_check=True,
use_scp=False
): ):
super().__init__( super().__init__(
@ -373,6 +374,15 @@ class SshConnection(SshConnectionBase):
) )
self.timeout = timeout if timeout is not None else self.default_timeout self.timeout = timeout if timeout is not None else self.default_timeout
# Allow using scp for file transfer if sftp is not supported
self.use_scp = use_scp
if self.use_scp:
logger.debug('Using SCP for file transfer')
_check_env()
self.options = self._get_default_options()
else:
logger.debug('Using SFTP for file transfer')
self.client = self._make_client() self.client = self._make_client()
atexit.register(self.close) atexit.register(self.close)
@ -522,12 +532,20 @@ class SshConnection(SshConnectionBase):
cls._pull_folder(sftp, src, dst) cls._pull_folder(sftp, src, dst)
def push(self, source, dest, timeout=30): def push(self, source, dest, timeout=30):
with _handle_paramiko_exceptions(), self._get_sftp(timeout) as sftp: # If using scp, use implementation from base class
self._push_path(sftp, source, dest) if self.use_scp:
super().push(source, dest, timeout)
else:
with _handle_paramiko_exceptions(), self._get_sftp(timeout) as sftp:
self._push_path(sftp, source, dest)
def pull(self, source, dest, timeout=30): def pull(self, source, dest, timeout=30):
with _handle_paramiko_exceptions(), self._get_sftp(timeout) as sftp: # If using scp, use implementation from base class
self._pull_path(sftp, source, dest) if self.use_scp:
super().pull(source, dest, timeout)
else:
with _handle_paramiko_exceptions(), self._get_sftp(timeout) as sftp:
self._pull_path(sftp, source, dest)
def execute(self, command, timeout=None, check_exit_code=True, def execute(self, command, timeout=None, check_exit_code=True,
as_root=False, strip_colors=True, will_succeed=False): #pylint: disable=unused-argument as_root=False, strip_colors=True, will_succeed=False): #pylint: disable=unused-argument