首页 > 编程知识 正文

ssh远程文件到本地,python获取远程服务器目录下文件

时间:2023-05-03 15:37:24 阅读:218009 作者:4840

Python通过SSH下载远程服务器文件 1.安装SSH登录三方库paramiko2.运行下载脚本
有些远程服务器只能通过SSH登录,不能通过Samba将文件下载到本地形,可以通过下面脚本批量下载指定文件夹里面所有文件到本地,下载的原理是模拟用户输入ls 和 cat两个指令,将cat读取到的信息保存本地文件

1.安装SSH登录三方库paramiko

使用pip install paramiko 安装

2.运行下载脚本 import paramiko,os,sysinput_dir = "/home/" #需要下载远程服务器的目标文件夹路径output_dir = """E:AndroidProjectsave_file""" #要保存文件的路径hostname = 'XXX.XXX.X.XXX' #服务器IP地址username = 'XXXX' # 登录账号password = 'XXXX' #登录密码port = 22def list_dir(root): cmd = 'ls --file-type '+root stdin, stdout, stderr = ssh.exec_command(cmd) result = stdout.read() return result.decode().split('n')def save_file(root,name): try: save_path = output_dir + root.split(input_dir)[-1] if not os.path.exists(save_path): os.makedirs(save_path) save_file_path = save_path + name cmd = 'cat '+ root + name stdin, stdout, stderr = ssh.exec_command(cmd) result = stdout.read() if not result: return with open(save_file_path,'wb+') as fd: fd.write(result) print('save file:'+save_file_path) except : print('save path:'+save_file_path) print("Unexpected error:", sys.exc_info()[0])def traverse_dir(root): nodes = list(item for item in list_dir(root) if len(item) > 0) for node in nodes: #如果该节点是文件夹,继续遍历 if node.endswith('/'): traverse_dir(root + node) else: #如果该节点是文件 则保存该文件 save_file(root,node)if __name__ == '__main__': if len(output_dir) > 0 and output_dir[-1] != '/': output_dir += '/' if len(input_dir) > 0 and input_dir[-1] != '/': input_dir += '/' ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=hostname, port=port, username=username, password=password) traverse_dir(input_dir) ssh.close()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。