封装常用的SSH功能(远程上传、下载、执行命令)

封装常用的SSH功能(远程上传、下载、执行命令)

coding:utf-8
import paramiko

class SSHUtil(object):
    '''
    封装常用的SSH功能,包括:
    * 远程登录
    * 远程执行命令
    * 上传文件
    * 下载文件
    '''

    def __init__(self, ip, username, password, port=22):
        '''
        初始化

        :param ip: 远程服务器的IP
        :param username: 远程服务器登录用户名
        :param password: 远程服务器登录用户密码
        :param port: 远程服务器的端口,SSH协议默认为22
        '''
        self.ip = ip
        self.port = port
        self.username = username
        self.password = password
        # 登录,获取SSH对象
        self.login(ip, username, password, port)

    def login(self, ip, username, password, port=22):
        '''
        用paramiko SSH登录远程服务器

        :param ip: 远程服务器的IP
        :param username: 远程服务器登录用户名
        :param password: 远程服务器登录用户密码
        :param port: 远程服务器的端口,SSH协议默认为22
        '''
        # 创建一个SSH客户端对象
        self.ssh = paramiko.SSHClient()
        # 设置访问策略
        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 与远程主机进行连接
        self.ssh.connect(hostname=ip, port=port, username=username, password=password)

    def execute_command(self, command_str):
        '''
        执行远程命令

        :param ssh: SSH连接对象
        :param command_str: 命令字符串
        '''
        input, output, err = self.ssh.exec_command(command_str)
        resp, error = output.read(), err.read()
        if resp:
            return resp
        print('error occurs: {0}'.format(error))
        raise Exception(error)

    def upload_file(self, local_file_path, remote_file_path):
        '''
        上传文件

        :param ssh: SSH连接对象
        :param local_file_path: 本地文件路径
        :param remote_file_path: 远程文件存放路径
        '''
        # 创建sftp对象上传文件
        sftp = self.ssh.open_sftp()
        sftp.put(local_file_path, remote_file_path)
        sftp.close()

    def download_file(self, remote_file_path, local_file_path):
        '''
        下载文件

        :param ssh: SSH连接对象
        :param remote_file_path: 远程文件路径
        :param local_file_path: 本地文件存放路径
        '''
        # 创建sftp对象下载文件
        sftp = self.ssh.open_sftp()
        sftp.get(remote_file_path, local_file_path)
        sftp.close()


def sample():
    '''
    用法示例
    '''
    # 基本信息
    ip = '94.xx.xx.xx'
    username = 'xx'
    password = "xxxxx"
    # 获取SSHUtil对象
    ssh_util = SSHUtil(ip, username, password)
    # 执行远程命令
    command = 'ls /root/'
    print(ssh_util.execute_command(command))
    # 上传文件
    ssh_util.upload_file("E:\\a.png", "/root/a.png")
    # 下载文件
    ssh_util.download_file('/root/a.png', 'E:\\a.png')
    print('end')


if __name__ == '__main__':
    sample()

你可能感兴趣的:(封装常用的SSH功能(远程上传、下载、执行命令))