ssh

Windows Junction 导致 SFTP 上传失败? 【已解决】

压缩能传、SFTP 报 SSH_FX_FAILURE?多半是 Nitro/pnpm 的目录联接被当成普通文件了

346 字预计阅读 1 分钟比特实验室论坛
本文目录
Windows Junction 导致 SFTP 上传失败? 【已解决】

Windows Junction 导致 SFTP 上传失败

压缩能传、SFTP 报 SSH_FX_FAILURE?多半是 Nitro/pnpm 的目录联接被当成普通文件了

现象

用 Firefly 把 Nuxt / Nitro 的 .output 整目录传到 Linux 时,个别路径失败:

create remote file: sftp: "Failure" (SSH_FX_FAILURE)

进度卡在 0%。失败项往往是:

  • .../css-tree@x.y.z/node_modules/mdn-data
  • .../@vue/compiler-core/node_modules/entities

同一批文件打成 zip 上传再解压,一切正常。说明远端权限、磁盘、路径本身没问题。

原因

这些路径在 Windows 上不是普通目录,而是 Junction(目录联接)

mdn-data  →  .nitro/mdn-data@2.0.28
entities  →  .nitro/entities@7.0.1

Nitro / pnpm 用联接复用嵌套依赖,很常见。

旧上传逻辑用 filepath.WalkDir 扫本地树。它不跟随符号链接;在 Windows 上 Junction 更坑:

API Junction 表现
Lstat ModeIrregularIsDir=falseModeSymlink=false
Stat 跟随目标,IsDir=true

于是联接节点被当成「普通文件」去 OpenFile,OpenSSH 回笼统的 SSH_FX_FAILURE。压缩工具会跟着联接走进真实目录,所以 zip 路径没问题。

修复

上传遍历改为:

  1. Lstat 识别 symlink / ModeIrregular(Junction)
  2. Stat 看目标:目录则递归展开,文件则按联接路径上传内容
  3. os.SameFile 做栈式环检测(Windows 上 EvalSymlinks 往往解不开 Junction)

效果与「压缩再解压」一致:远端得到普通目录和文件,而不是半残的联接节点。

评论

加载评论中…

上一篇 服务器磁盘扩容实战:用 Firefly AI 终端(智能终端)一句话完成扩盘 下一篇 SSH 客户端怎么选?Firefly 与主流终端横评
查看更多 →