Python实现SFTP自动化传输:从原理到代码实战

小岛来信
小岛来信
发布时间:2026-10-15| 6人浏览过
原创

本文深入解析SFTP与FTP的安全差异,重点展示如何使用Python实现SFTP自动化文件传输。通过详解YAML配置文件结构、Flask应用初始化及核心SFTP客户端逻辑,提供从环境搭建到代码运行的完整指南,解决WinSCP脚本兼容性问题,适用于企业级数据同步场景。

前言

本文旨在记录Python在办公自动化中应用SFTP传输的核心内容。

公司内部B2B业务通常依赖WinSCP结合SFTP协议与客户进行数据交互。WinSCP是一款基于Windows环境的开源SSH图形化SFTP客户端。起初尝试复用同事提供的WinSCP脚本代码向总部传输数据,但执行始终失败。由于不确定是WinSCP版本兼容性问题,还是要求两端操作系统均为Windows环境,最终决定查阅相关资料,重新编写Python脚本以解决此问题。

以下为正文详细案例,供参考学习。

SFTP与FTP的核心区别

两者在安全通道、底层协议、连接方式及安全性方面存在显著差异。

  • SFTP(SSH File Transfer Protocol)是一种基于网络的安全文件传输协议,旨在通过私有且安全的数据通道传输文件,确保数据传输的安全性。
  • FTP(File Transfer Protocol)即文件传输协议,其本身不提供加密通道,主要用于主机间的文件共享。在Web场景中,将文件上传至FTP服务器是共享文件最便捷的方式,用户可通过FTP客户端下载所需文件。

SFTP与FTP的具体差异表现如下:

首先,在安全通道方面,FTP不提供任何加密通道,而SFTP通过SSH协议建立安全通道进行传输。其次,在协议层面,FTP基于TCP/IP协议,使用TCP端口21建立控制连接;SFTP则是SSH协议的一部分,通过TCP端口22建立客户端与服务器间的安全连接。最后,在数据安全性上,FTP以明文形式发送密码和数据,安全性较低;SFTP则在发送前对数据进行加密,以二进制形式传输,无法直接读取原文,因此安全性更高。具体技术细节建议查阅相关网络资料。

具体使用步骤

程序整体结构

配置文件设计

config.yaml配置代码如下:

CONFIG: &config
  # 日志配置文件路径
  LOGGING_CONFIG_PATH: ./Configs/logging.yaml
  # 日志文件存放位置
  LOGGING_PATH: ./logs
  # SFTP
  FTP_HOST: ***.*****.com
  FTP_PORT: 22
  FTP_USER_NAME : XXXXXXXXX
  FTP_PASSWORD : XXXXXXXXX
  HOME_DIR : /
  REMOTE_PATH : /XXX/
  LOCAL_DIR : D:\Web\HR
  LOCAL_DESDIR : D:\Web\HR\TMP
  # 邮件
  SMTP_SERVER : CNMAIL
  SMTP_USER_NAME : XXX@163.com
  SMTP_USER_PWD : XXX
  FROM_MAIL : isadmin@XXX.com
  TO_MAIL : XXX.zhang@XXX.com
  CC_MAIL : XXX.zhang@XXX.com


DEVELOPMENT : &development
  <<: *config # 继承config,没有重新定义的变量,使用config变量值
  DEBUG: True

PRODUCTION : &production
  <<: *config # 继承config,没有重新定义的变量,使用config变量值
  DEBUG: True

读取配置文件逻辑

相关代码实现如下:

def create_app(config_name=None, config_path=None):
    app = Flask(__name__)
    # 读取配置文件
    if not config_path:
        pwd = os.getcwd()
        config_path = os.path.join(pwd, 'Configs/config.yaml')
    if not config_name:
        config_name = 'PRODUCTION'
    conf = read_yaml(config_name, config_path)
    app.config.update(conf)

    if not os.path.exists(app.config['LOGGING_PATH']):
        # 日志文件目录
        os.mkdir(app.config['LOGGING_PATH'])
    # 日志设置
    with open(app.config['LOGGING_CONFIG_PATH'], 'r', encoding='utf-8') as f:
        dict_conf = yaml.safe_load(f.read())
    logging.config.dictConfig(dict_conf)  # 载入日志配置

    return app

SFTP客户端模块 (sftp_client.py)

邮件通知模块 (email_client.py)

主程序入口 (main.py)

主程序运行代码如下:

if __name__ == "__main__":

    remotePath = "" 
    localPath = ""  
    runSFTP(remotePath, localPath)

总结

至此,关于Python办公自动化中SFTP传输的详细教程已介绍完毕。如需了解更多Python SFTP相关内容,欢迎查阅本站过往文章或继续浏览后续系列教程,感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。