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

浙公网安备 33010602011771号