Sublime Text 外网同步需 SFTP 插件且严格满足条件:必须通过“Project → Add Folder to Project”添加目录、重启编辑器、配置正确命名的 sftp-config.json(置于项目根目录)、确保 SSH 密钥权限为600并关闭 password 字段,失败时应调出 SFTP 控制台查真实日志。

Sublime Text 本身不支持外网同步,必须靠 SFTP 插件实现;但“能连上”和“真能同步”是两回事——绝大多数外网同步失败,不是因为服务器没开 SFTP,而是插件根本没走通 SSH 握手流程,或者路径映射完全错位。
右键没有 SFTP 菜单?先确认项目和文件夹是否“被识别”
插件不会在任意场景下激活:它只响应「已加载的项目」+「侧边栏中真实显示的文件夹图标」。这不是 UI bug,是设计限制。
- 必须通过 Project → Add Folder to Project 把本地目录加进项目(不能只用 File → Open Folder)
- 右键对象只能是侧边栏顶层那个文件夹图标,不是里面的文件、不是空白处、也不是未保存的 untitled 标签页
- 安装完 SFTP 后必须重启 Sublime Text —— Package Control 不会热加载菜单项
- 确保安装的是作者为
wbond的SFTP,别选sftp-client或FTPSync等仿制品
sftp-config.json 放对位置、写对字段,否则静默失效
这个文件不是全局配置,而是严格绑定到你右键映射的那个文件夹根目录下。名字大小写、路径、内容格式错一个,插件就当它不存在。
- 文件名必须是
sftp-config.json(全小写、带短横线、.json 扩展名),SFTP-config.json或sftp_config.json都无效 - 必须放在项目根目录(即你右键的那个文件夹下),不能放在子目录或用户配置目录里
-
remote_path必须以/开头,结尾也建议加/(如"/var/www/html/"),否则路径拼接会偏移 -
ssh_key_file支持~展开(如"~/.ssh/id_rsa"),但不识别$HOME或其他环境变量 - 用密钥登录时,
password字段必须彻底删除,留空字符串("password": "")也会触发密码认证逻辑并失败
upload_on_save 设了却没上传?检查三个隐性前提
这个开关只是触发器,真正决定是否上传的是上下文匹配逻辑,不是配置本身。
-
upload_on_save必须写在sftp-config.json的根对象层级,不能嵌套在files、sync_down_on_open或其他字段下 - 当前编辑的文件路径必须落在
local_path(或项目根目录)之下,且其相对路径要能与remote_path对齐(例如remote_path: "/var/www/html/"+ 本地文件index.html→ 上传到/var/www/html/index.html) - 如果服务器响应慢,插件默认 3 秒超时,可加
"connect_timeout": 10提高容忍度 - 即使你在终端能免密
ssh登录,SFTP 插件也不会复用ssh-agent,它每次都是全新调用系统ssh命令
外网同步失败时,别猜,直接看底层日志
弹窗提示模糊(比如只说 Permission denied 或干脆没反应),是因为插件把错误吞掉了。真实原因藏在控制台输出里。
- 按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入SFTP: Show Console回车 - 所有底层
ssh和sftp命令、返回码、错误信息都会实时打印出来 - 常见真因:
ssh_key_file权限不是600(Linux/macOS 下执行chmod 600 ~/.ssh/id_rsa)、远程/etc/ssh/sshd_config关了PubkeyAuthentication yes、remote_path目录对当前用户不可写 - 上传后文件权限变成
600导致网页打不开?可在配置中加"default_permissions": "644"
外网同步最脆弱的环节从来不是配置语法,而是 SSH 认证链和路径映射关系。一旦涉及公网 IP、防火墙、非标准端口或 web 目录权限,每个环节都可能断掉,且无明确报错。动手前先跑通 ssh -i ~/.ssh/yourkey user@host -p 22,再动 Sublime —— 这比反复改 JSON 有效得多。











