Spaces:
Running
Running
# Copyright (c) Microsoft Corporation. | |
# Licensed under the MIT license. | |
import os | |
from .common_utils import print_error | |
from .command_utils import install_package_command | |
def check_environment(): | |
'''check if paramiko is installed''' | |
try: | |
import paramiko | |
except: | |
install_package_command('paramiko') | |
import paramiko | |
return paramiko | |
def copy_remote_directory_to_local(sftp, remote_path, local_path): | |
'''copy remote directory to local machine''' | |
try: | |
os.makedirs(local_path, exist_ok=True) | |
files = sftp.listdir(remote_path) | |
for file in files: | |
remote_full_path = os.path.join(remote_path, file) | |
local_full_path = os.path.join(local_path, file) | |
try: | |
if sftp.listdir(remote_full_path): | |
copy_remote_directory_to_local(sftp, remote_full_path, local_full_path) | |
except: | |
sftp.get(remote_full_path, local_full_path) | |
except Exception: | |
pass | |
def create_ssh_sftp_client(host_ip, port, username, password, ssh_key_path, passphrase): | |
'''create ssh client''' | |
try: | |
paramiko = check_environment() | |
conn = paramiko.Transport(host_ip, port) | |
if ssh_key_path is not None: | |
ssh_key = paramiko.RSAKey.from_private_key_file(ssh_key_path, password=passphrase) | |
conn.connect(username=username, pkey=ssh_key) | |
else: | |
conn.connect(username=username, password=password) | |
sftp = paramiko.SFTPClient.from_transport(conn) | |
return sftp | |
except Exception as exception: | |
print_error('Create ssh client error %s\n' % exception) | |
def remove_remote_directory(sftp, directory): | |
'''remove a directory in remote machine''' | |
try: | |
files = sftp.listdir(directory) | |
for file in files: | |
filepath = '/'.join([directory, file]) | |
try: | |
sftp.remove(filepath) | |
except IOError: | |
remove_remote_directory(sftp, filepath) | |
sftp.rmdir(directory) | |
except IOError as err: | |
print_error(err) | |