修复 SFTP 挂载中符号链接失效的问题 — NetDrive

阅读时间 5 分钟 troubleshooting sftp
Morgan
MorganStaff Engineer
排查 SFTP 挂载的 NetDrive 中符号链接无法解析的问题:版本要求、目标失效的链接,以及权限原因。

SFTP 服务器上的部署目录通常会保留一个 current 符号链接,指向当前正在使用的发布目录 —— current → releases/20260821-1。这是零停机部署的标准做法,但也正是第一次用 NetDrive 挂载该服务器时最容易悄悄出问题的地方。这个链接可能显示为空文件、显示为损坏的快捷方式,或者根本不出现,原本期望 S:\current\config.yaml 能正常工作的脚本突然就失灵了。

NetDrive drive manager showing Google Drive, S3 and pCloud mounted as drive lettersMounted clouds appearing as native drives in Windows File Explorer

挂载 SFTP 服务器,获得可正常工作的符号链接支持

NetDrive 让 Google Drive、OneDrive、S3、SFTP、WebDAV 等在 Windows 和 macOS 上显示为本地驱动器 — 无需同步,无需完整下载。

  • 3.17.817 及更高版本的 SFTP 挂载可正确解析符号链接
  • 支持密码或 SSH 密钥认证
  • 支持 Windows、macOS,以及实验性的 Linux 构建版本
WindowsmacOS
下载 NetDrive →

免费试用。提供终身与订阅方案。

先检查版本

NetDrive 从 3.17.817 版(2023-01-07)开始为 SFTP 连接添加了符号链接支持。在此之前的任何版本中,服务器上的符号链接在挂载端都没有对应表现——它可能不会出现,也可能显示为一个零字节文件,而不是指向其目标。这是”我的符号链接不生效”报告中最常见的原因,在动服务器端任何东西之前,值得先排除这个可能性。

要检查已安装的版本,打开 NetDrive 的驱动器管理器,点击 NetDrive 图标(Windows 上在系统托盘,macOS 上在菜单栏),然后打开 About NetDrive。如果版本号早于 3.17.817,请先更新再继续——当前发布版本为 3.19.7,可从 netdrive.net/download 获取。

NetDrive 驱动器管理器中显示一个 SFTP 连接与其他已挂载驱动器并列

已经在 3.17.817 或更高版本?检查链接本身

如果版本不是问题所在,那么问题通常出在符号链接自身的配置上。请在服务器端通过常规 SSH 会话逐项排查:

  • 绝对路径目标与相对路径目标。 相对符号链接(current → releases/20260821-1)是相对于自身所在目录解析的,通常能顺利通过挂载。绝对符号链接(current → /var/www/app/releases/20260821-1)只有在该确切的绝对路径也存在,并且能从 SFTP 账户自身的文件系统视角访问到时才能正确解析——如果该账户被 chroot 限制在某个子目录下,这一点并不能保证。

    # Run this on the server to see how the link is defined
    ls -la /var/www/app/current
  • 目标位于 SFTP 账户根目录之外。 有些服务器会把 SFTP 用户限制在以其主目录或特定路径为根的 chroot 监狱中。指向该根目录之外任何位置的符号链接,对 SFTP 会话来说都是不可见的——因而对 NetDrive 来说也是如此——无论你运行的是哪个 NetDrive 版本。请确认目标路径位于 SFTP 账户所限定的同一根目录内。

  • 目标失效的链接。 如果符号链接所指向的发布目录已被删除或重命名(例如部署过程被中断,或清理脚本运行得过早),链接本身没有问题,只是无处可解析。服务器上的 ls -la 会以不同颜色显示该链接,或根据你的 shell 配置将其标记为已损坏。

  • 目标的权限问题,而不仅是链接本身。 符号链接文件本身可能是可读的,但其目标目录的权限却阻止了 SFTP 账户的访问。两处都要检查。

确认一个已连接的 SFTP 驱动器在设置后成功挂载

通过挂载确认修复结果

在排除了版本问题,并确认链接是相对路径、位于根目录内、且指向确实存在的目标之后,在 NetDrive 中重新连接该驱动器(在驱动器管理器中右键点击该连接并选择 Reconnect,或者先断开再重新连接),然后直接检查已挂载的路径:

# Windows PowerShell — replace S: with your assigned drive letter
dir S:\current
# macOS / Linux Terminal
ls -la /Volumes/sftp-mount/current

如果目标文件夹的内容现在能正确列出,说明符号链接已经正常解析。如果在确认了版本和链接本身的有效性之后,它仍然显示为空或缺失,那么剩下的变量通常就是服务器端的 SFTP 子系统配置——具体来说,是服务器的 sftp-server 进程是否禁用了符号链接遍历,这属于服务器管理员需要处理的问题,而不是 NetDrive 的设置项。

小结

SFTP 挂载上的符号链接处理取决于两个相互独立的因素:你的 NetDrive 构建版本是否支持它(3.17.817 及以上),以及从 SFTP 账户的角度看该链接本身是否有效。先检查版本——这是更快的修复方式——然后再排查链接的目标,不要一开始就认定是 NetDrive 的问题。关于更广泛的 SFTP 连接问题,参见 Fix SFTP Authentication Failures in NetDrive;关于初始设置,参见 Mount an SFTP Server on Windows

— Morgan, NetDrive