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

使用Apache Mina sshd的ScpClient上传文件时ScpHelper.readAck()抛出异常

解决Apache MINA SSHD ScpClient上传报EOFException的问题

问题诊断

你遇到的java.io.EOFException: readAck - EOF before ACK异常,核心原因是远程SCP进程提前终止了SSH通道,导致本地客户端无法读取到预期的ACK响应。结合你提到命令行SCP能正常工作的情况,最可能的触发点是代码中错误使用了ScpClient.Option.Recursive选项。

具体原因

ScpClient.Option.Recursive是专门用于上传目录时递归处理子目录和文件的选项,但你当前上传的是单个文件/tmp/test.txt,启用这个选项会让远程SCP进程接收到不符合预期的指令,从而直接关闭连接,导致本地客户端收不到ACK信号,最终抛出EOF异常。

修复方案

移除ScpClient.Option.Recursive选项,修改后的上传代码片段如下:

scpClient.upload(
        source,
        "/home/renderingacc/README.md",
        ScpClient.Option.PreserveAttributes);

额外排查建议(若上述修复无效)

  • 确认目标路径的父目录/home/renderingacc/存在,且当前SSH用户拥有该目录的写入权限(虽然命令行可正常上传大概率无权限问题,但可再次验证)
  • 检查远程服务器的SCP配置,比如是否存在自定义的scp命令包装脚本(强制添加特定参数),可通过代码执行远程命令which scp和scp -V确认远程SCP的版本与执行路径
  • 尝试移除ScpClient.Option.PreserveAttributes选项,部分老旧版本的SCP服务器可能不支持属性保留功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:20:12