|
|
|
|
|
|
|
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) |
|
|