You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Ansible SFTP模块在Rocky Linux运行失败,Mac/Ubuntu正常

故障原因及解决线索

故障核心原因

  1. 自定义SFTP模块逻辑倒置:处理direction: download时,错误调用了Paramiko的put()方法(用于上传本地文件到SFTP服务器),而非get()方法(从SFTP服务器拉取文件到本地)。
    • 从Rocky Linux的报错栈可见,paramiko/sftp_client.py的put()方法执行os.stat(localpath)检查本地文件,但/devops/junk.txt实际是SFTP服务器上的路径,本地Rocky Linux主机无此文件,因此触发FileNotFoundError。
  2. 跨平台表现异常的根源:Mac上未报错属于“误打误撞”——模块逻辑混乱导致参数传递顺序颠倒,可能把本地/tmp/junk.txt作为put的本地路径、服务器/devops/junk.txt作为远程路径,加上Paramiko版本或系统差异未触发显式报错,反而完成了文件下载,但逻辑本质完全错误。

解决线索

  • 修正方法调用分支:找到模块中transfer_file函数(报错栈第30行),确保direction: download分支调用sftp.get(),而非sftp.put(),正确参数传递应为:
    • 下载场景:sftp.get(remotepath=src, localpath=dest)
    • 上传场景:sftp.put(localpath=src, remotepath=dest)
  • 校验参数映射关系:确认src和dest的对应逻辑:
    • 下载时:src是SFTP服务器路径,dest是本地路径
    • 上传时:src是本地路径,dest是SFTP服务器路径
  • 统一依赖版本:在Rocky Linux和Mac上安装相同版本的Paramiko,排除版本差异导致的行为不一致。
  • 添加前置校验:在模块中增加校验逻辑:
    • 上传前:检查本地src路径是否存在
    • 下载前:通过SFTP的stat()方法检查服务器端src路径是否存在,提前抛出明确错误。

内容的提问来源于stack exchange,提问作者Chris F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:15:55