python 下载sftp

实现功能:利用python自动连接sftp,并下载sftp中指定目录下的所有目录及文件

系统环境:centos7
python版本:python3
使用模块包:paramiko ,若未安装,可使用 pip install paramiko 进行安装

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import paramiko
import os

class ParamikoHelper():

    def __init__(self,remote_ip, remote_ssh_port, private_key_file, ssh_username ):
        self.remote_ip = remote_ip
        self.remote_ssh_port = remote_ssh_port
        self.ssh_username = ssh_username
        self.private_key = paramiko.RSAKey.from_private_key_file(private_key_file) # 实例化一个私钥对象

    def connect_ssh(self):
        try:
            self.ssh = paramiko.SSHClient()
            self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            self.ssh.connect(hostname=self.remote_ip, port=self.remote_ssh_port, username=self.ssh_username,
                             pkey=self.private_key)
        except Exception as e:
            print(e)
        return self.ssh

    def close_ssh(self):
        try:
            self.ssh.close()
        except Exception as e:
            print(e)

    def exec_shell(self, shell):
        ssh = self.connect_ssh()
        try:
            stdin, stdout, stderr = ssh.exec_command(shell)
            return stdin, stdout, stderr
        except Exception as e:
            print(e)

    def sftp_put_file(self, file, local_dir, remote_dir):
        try:
            t = paramiko.Transport((self.remote_ip, self.remote_ssh_port))
            t.connect(username=self.ssh_username, pkey=self.private_key)
            sftp = paramiko.SFTPClient.from_transport(t)
            sftp.put(os.path.join(local_dir, file), remote_dir)
            t.close()
        except Exception:
            print("connect error!")

    def sftp_get_file(self, file, local_dir, remote_dir):
        try:
            t = paramiko.Transport((self.remote_ip, self.remote_ssh_port))
            t.connect(username=self.ssh_username, pkey=self.private_key)
            sftp = paramiko.SFTPClient.from_transport(t)
            sftp.get(remote_dir, os.path.join(local_dir, file))
            t.close()
        except Exception:
            print("connect error!")


def main():
    sftp_ip = '192.168.0.1'
    remote_port = 22
    username = 'root'
    private_key_file = 'performance_rsa_4096' # RSA私钥
    ph = ParamikoHelper(remote_ip=sftp_ip,remote_ssh_port=remote_port,private_key_file=private_key_file,ssh_username=username)


    # 文件上传
    file = 'testfile.txt'
    remote_dir = '/sfto/test/' + file
    local_dir = os.getcwd()
    ph.sftp_put_file(file=file, local_dir=local_dir, remote_dir=remote_dir)

    # 下载文件file3.txt
    file = 'file3.txt'
    remote_dir = '/root/test_log/' + file
    local_dir = os.getcwd()
    ph.sftp_get_file(file=file, local_dir=local_dir, remote_dir=remote_dir)

if __name__ == '__main__':
    main()

 



posted @ 2022-01-21 10:19  DB乐之者  阅读(394)  评论(0)    收藏  举报