最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Python读取远程服务器文件

XAMPP案例 admin 703浏览 0评论

本文介绍利用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读取远程服务器文件

您必须 登录 才能发表评论!