Sublime Text 需通过 SFTP 插件实现远程同步,其配置文件 sftp-config.json 必须置于项目根目录,且需手动填写 host、user、remote_path 等参数,不读取系统 SSH 配置;密钥登录须用绝对路径并设权限 600,上传下载失败多因 remote_path 错误或 sync_down_on_open 设置不当。

Sublime Text 本身不支持 FTP/SFTP,必须通过第三方插件实现远程文件同步;SFTP 插件(由 wbond 开发)是目前最稳定、配置最清晰的方案,但它的配置方式和常见错误与直觉有偏差——比如它不走系统 SSH 配置,也不自动读取 ~/.ssh/config,必须手动写全连接参数。
安装 SFTP 插件前先确认 Package Control 已就绪
如果没装过 Package Control,直接按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Install Package Control 并回车。等状态栏提示完成后再操作下一步。否则后续所有插件安装都会失败,且不会报错,只静默跳过。
装好后再次调出命令面板,输入 Package Control: Install Package → 回车 → 等待列表加载完成 → 输入 SFTP → 选中并回车安装。
sftp-config.json 必须放在项目根目录下,不能放用户配置目录
SFTP 插件不会全局生效,它只认当前 Sublime 项目的根目录里是否存在 sftp-config.json。这个文件不存在,右键菜单里就不会出现 Sync Remote → Download/Upload 等选项,也不会弹任何提示。
正确做法:
- 在 Sublime 中用
Project → Add Folder to Project...加入你要操作的本地文件夹 - 右键该文件夹 →
SFTP → Setup Server Configuration,会自动生成一个带注释的sftp-config.json - 手动修改其中的
host、user、remote_path字段,保存
常见填错点:
-
host写成ftp://xxx.com—— 应该只写域名或 IP,如"host": "192.168.1.100" -
remote_path末尾加了/—— 实际会拼成双斜杠,导致路径错误,应写成"remote_path": "/var/www/html"(不加尾部斜杠) - 用密码登录却漏了
password字段,或用了密钥但没设private_key路径
使用密钥登录时,private_key 必须是绝对路径且权限为 600
即使你在终端能用 ssh user@host 直连成功,SFTP 插件仍可能报错 Permission denied (publickey)。原因通常是:
-
private_key值写的是相对路径(如"~/.ssh/id_rsa"),Sublime 不展开~,必须写成完整路径,例如"/Users/you/.ssh/id_rsa"或"C:\\Users\\You\\.ssh\\id_rsa" - 私钥文件权限太开放(比如被设为 644),SSH 协议拒绝读取。Linux/macOS 下需运行:
chmod 600 /path/to/id_rsa
- 密钥类型是新版本 OpenSSH 的
ed25519,而旧版SFTP插件(v3.x)不支持,需升级到 v4.x 或改用rsa密钥
上传/下载失败时优先检查 remote_path 和 sync_down_on_open
很多“上传没反应”或“下载覆盖本地文件”的问题,根源不在连接,而在路径映射逻辑。关键字段:
-
remote_path:必须和服务器上目标目录**完全一致**,区分大小写,且不能包含用户家目录别名(如~/public_html要写成/home/user/public_html) -
sync_down_on_open:设为true后,每次打开本地文件都会自动从远程拉取最新版——这在多人协作时容易误覆盖未提交的修改 -
upload_on_save:设为true后,Ctrl+S 会立即上传,但若网络慢或文件大,会卡住编辑器 UI,建议仅对小项目开启
调试建议:打开 Sublime 控制台(View → Show Console),操作上传/下载后看是否有类似 IOError: [Errno 2] No such file 的提示,它通常指向 remote_path 错误。
真正麻烦的不是配置步骤,而是 SFTP 插件把“连接”和“路径映射”绑死在单个 JSON 文件里——换一台服务器就得复制整个项目、重配一次;多人共用同一份代码时,每个人的 sftp-config.json 还得加进 .gitignore,稍不注意就提交了密码。










