本文介绍利用Python获取远程服务器上的文件列表,以及上传、读取文件。
环境
(base) [root@localhost ~]# python -V
Python 3.7.3
用到的模块:paramiko
pip install paramiko
1、读取远程文件列表
远程连接使用ssh服务,需要远程服务器开启ssh服务,暴露端口。
远程连接获取文件列表,通过 exec_command 函数执行命令,这里以查找 .txt 扩展名的文件为例,命令如下:
find / -name "*.txt"
2、文件的上传和下载使用 sftp 协议,同样要暴露端口给客户端。
完整代码如下
# -*- coding: utf-8 -*-
import paramiko
class ServerSpider(object):
def __init__(self):
self.hostname = '192.168.11.202'
self.port = 22
self.username = 'root'
self.password = 'root*!@#&^%'
self.ssh = ''
self.transport = ''
def server_connect(self):
self.ssh = paramiko.SSHClient()
# 加上这句话不用担心选yes的问题,会自动选上(用ssh连接远程主机时,第一次连接时会提示是否继续进行远程连接,选择yes)
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(self.hostname, port=self.port, username=self.username, password=self.password)
def find_by_ext(self, ext):
command = 'find / -name "*' + ext + '"'
stdin, stdout, stderr = self.ssh.exec_command(command)
res_list = stdout.readlines()
self.ssh.close()
for f in res_list:
if not f.strip().endswith('.txt'):
res_list.remove(f)
return res_list
def sftp_get(self, file_list):
if not file_list:
exit()
transport = paramiko.Transport((self.hostname, self.port)) # 获取Transport实例
transport.connect(username=self.username, password=self.password) # 建立连接
# 创建sftp对象,SFTPClient是定义怎么传输文件、怎么交互文件
sftp = paramiko.SFTPClient.from_transport(transport)
# 将本地上传至服务器
# sftp.put("/tmp/tmp.txt", "/www/tmp.py")
# 将服务器 下载到本地
tmp_filename = 'tmp.txt'
for f in file_list:
print(f)
sftp.get(f.strip(), "./%s" % tmp_filename)
exit()
# 关闭连接
transport.close()
if __name__ == '__main__':
ss = ServerSpider()
ss.server_connect()
res_list = ss.find_by_ext('.txt')
print(res_list)
ss.sftp_get(res_list)
如有不足,欢迎留言,共勉。
转载请注明:XAMPP中文组官网 » Python读取远程服务器文件