remote-ftp不支持实时同步,仅支持显式上传或配置watch后约500ms延迟自动上传(断网不重试);需手动创建SFTP配置、用privatekey替代明文密码,并确保remote为绝对路径。

Atom 本身不支持原生远程连接,所有“远程编辑”或“同步”都依赖插件,且机制完全不同——remote-ftp 是上传/下载式同步,remote-edit 是保存即推的单向 SFTP 编辑,sshfs 挂载才是真·本地体验。选错方案,后面全是坑。
remote-ftp 怎么配 SFTP 同步(非实时)
remote-ftp 的核心是显式触发同步,不是自动保存即生效。它适合部署型场景(比如改完 HTML 就手动推到测试服务器),不适合日常开发。
- 安装后必须手动创建配置文件:
Packages → Remote-ftp → Create SFTP config file,生成的ftp-config.json要填全host、user、port;密码明文写进配置不安全,建议改用privatekey字段填绝对路径(如"/Users/me/.ssh/id_rsa"),并确保权限为600 -
"watch": [".*"]开启自动上传后,保存有约 500ms 延迟,且断网失败不重试、无提示——你 Ctrl+S 后立刻刷新网页,大概率看到旧版本 - 右键文件选
Sync local -> remote才真正上传;误点Sync local 会把服务器最新版拉下来,覆盖你本地未 commit 的修改 - 配置里
"connTimeout"和"keepalive"建议设为15000(15 秒),避免大文件上传中途断连
remote-edit 为什么连不上 SSH(只认密钥)
remote-edit 不是 FTP,走的是 SFTP 协议,底层调用 SSH,因此完全不支持密码登录——输错密码或没配密钥,它只会卡在 “Connecting…” 然后消失,控制台也无报错。
- SSH 地址格式必须完整:
user@host:port,例如deploy@10.0.2.15:2222;省略端口默认走 22,但很多 VPS 改过端口,漏写就永远连不上 - 本地私钥文件(如
~/.ssh/id_rsa)权限必须是600,否则 Node.js 的 SSH 库直接拒绝加载,Atom 不报错也不提示 - 远程
~/.ssh/authorized_keys必须已写入你本地公钥,用ssh-copy-id deploy@10.0.2.15 -p 2222最稳,别手抄 - 保存失败时,打开
View → Developer → Toggle Developer Tools,在 Console 里搜Failed to upload file才能看到具体错误(比如 permission denied 或 timeout)
sshfs 挂载才是远程开发的正解
如果你要编辑远程 Go 项目、跑 lint、跳转定义,或者希望 Git / 搜索 / 多光标全部正常工作,sshfs 是唯一靠谱路径——它让远程目录变成你本地磁盘的一部分,Atom 完全无感。
- macOS:先
brew install sshfs,再执行sshfs deploy@10.0.2.15:/home/deploy/go ~/mnt/remote -o follow_symlinks;挂载点目录(~/mnt/remote)需提前mkdir - Linux:确认用户已加入
fuse组(sudo usermod -a -G fuse $USER),再运行同上 sshfs 命令 - Windows:装
WinFsp+SSHFS-Win,右键“Map network drive”,地址填sftp://deploy@10.0.2.15/home/deploy/go - 挂好后,在 Atom 中
File → Add Project Folder选择挂载路径,所有操作都是实时的,Ctrl+S 即生效,无延迟、无冲突检测、无额外插件依赖
go-plus 远程开发必须改 GOPATH
即使你用 sshfs 挂好了远程 Go 目录,go-plus 默认仍查本地 $GOPATH。不改这个,import 自定义包照样报 cannot find package。
- Shell 配置中(如
~/.zshrc)明确设置:export GOPATH="/Users/me/mnt/remote"(路径必须和挂载点一致) - 执行
source ~/.zshrc && go env GOPATH确认输出正确;再ls $GOPATH/src看是否能列出远程服务器上的包目录 - Atom 启动前必须用该 Shell 启动(macOS 可用
atom .命令行启动,避免从 Dock 点开导致环境变量未加载) - 验证方式:打开挂载路径下的
main.go,把光标停在某个import "myproject/utils"上,按Ctrl+Click能跳转进去才算成功
真正卡住人的从来不是“怎么连”,而是密钥权限、挂载点 fuse 组、Shell 环境变量加载时机、以及 go-plus 对 $GOPATH 的硬依赖——这些细节漏一个,整个流程就静默失效。

















