先说几个核心判断:到了2026年,如果你还在Atom上折腾Remote-FTP插件,那基本可以死心了。不是配置的问题,是底层的东西彻底崩了——这插件自2021年起就没人维护,它依赖的那个ftp模块,跟Atom 1.60+版本内置的Electron和Node.js严重不对付。macOS Sonoma、Windows 11、Ubuntu 22.04及更新版本的操作系统,一启动就报 Cannot find module 'ftp',这可不是你少装了什么东西,而是根儿上的兼容性已经断了。

那么,这个插件在2026年到底是个什么情况?往下看。
Remote-FTP 启动就报 Cannot find module 'ftp' 怎么办
别折腾了,这不是你漏装了依赖,是插件作者早在2021年就停更了。它依赖的那个 ftp 模块,跟 Atom 1.60+ 内置的 Electron/Node.js 版本直接冲突。macOS Sonoma、Windows 11、Ubuntu 22.04+ 的用户,基本无解。
- 把 Atom 降级到 1.58 以下?这又会引来新麻烦:SSL 连接失败、中文路径乱码、PASV 超时……一个接一个。
- 手动去
npm install ftp或者修补 node_modules?Atom 的安全沙箱会直接抗议,而且每次更新插件,这些手动操作都会被清空。 - 等社区修复?GitHub issues 页面最后有效回复还停留在2022年,早就没人管了。
连得上但侧边栏空白,remote 目录不显示文件
这种情况更气人——明明连上了,但侧边栏就是一片空白。插件也不报错,就静悄悄地失败。常见原因不是网络不通,而是协议搞错了或者权限被卡死了。
- 协议和端口必须配对。比如你写的是
"protocol": "sftp",端口却填了21,或者反过来"protocol": "ftp"搭配22端口?这两者的协议栈完全不兼容,连上也是白搭。 "remote"路径必须是绝对路径,比如"/home/deploy/app"。写成"app"或"./app",它根本找不着北。- 再检查一下远程目录的权限。如果只有执行权(
r-x),没有读权(r--),那么ls命令直接失败,插件也毫无反应。 - 关键时刻,得用点“笨办法”:打开
View → Developer → Toggle Developer Tools,在 Console 里搜一下remote-ftp,真实的错误信息才会浮出水面,比如Permission denied (publickey)之类的。
用密钥登录却卡在 Connecting... 不弹框
这个问题也很典型。Remote-FTP 对私钥路径和权限的要求非常苛刻,一旦加载失败,它连个提示都不给,就直接卡在 Connecting... 不动了。
privatekey字段必须是绝对路径,比如"/Users/you/.ssh/id_rsa"。别想偷懒用~或者相对路径,它不认识。- 本地私钥文件的权限必须设为
600:chmod 600 ~/.ssh/id_rsa。权限宽松了,SSH 库直接拒绝加载。 promptForPass必须设为true。否则,就算你的密钥有口令,它也不会弹输入框。- 别忘了检查远程主机上的
~/.ssh/authorized_keys文件,确保对应的公钥已经写进去了。最稳妥的方式是用ssh-copy-id user@host完成这一步。
为什么 sshfs 挂载比插件更可靠
说到底,最靠谱的方案不是修修补补,而是从根儿上换条路走。用 sshfs 挂载远程目录就是一个绝佳的替代方案,因为它是操作系统级别的挂载,Atom 根本感知不到“远程”的存在,所有功能都能照常运行。当然,前提是得避开 Atom 自身监听器的一些小毛病。
- macOS 用户:用
brew install sshfs安装,然后运行类似sshfs user@host:/path ~/mnt/remote -o follow_symlinks的命令。 - Windows 用户:安装 WinFsp + SSHFS-Win,然后在 explorer 里右键“映射网络驱动器”,填上
sftp://user@host/path即可。 - Linux 用户:确保当前用户在
fuse用户组里,然后mkdir -p ~/mnt/remote,执行sshfs user@host:/path ~/mnt/remote。 - 挂载完成后,在 Atom 中用
File → Add Project Folder打开~/mnt/remote,编辑和保存就是实时同步,跟本地操作一样。 - 有个小提醒:别挂载整个
node_modules或日志目录。Atom 的chokidar监听器对网络文件系统支持不佳,一碰到这种大动静就容易触发ENOTCONN错误,然后卡死。
回顾一下,真正麻烦的从来不是“怎么连”,而是那些零散但又致命的细节:密钥权限、fuse 用户组、挂载点目录权限、sshd_config 里是否启用了 SFTPSubsystem……任何一个环节漏了,整个流程就会卡在 Connecting... 那里,一动不动。