sublime text 本身不支持远程连接,必须安装 wbond 版 sftp 插件并重启;右键菜单仅在已加载项目且侧边栏显示文件夹时激活,sftp-config.json 必须置于项目根目录、严格命名、正确配置 host/user/remote_path/ssh_key_file,upload_on_save 仅对路径匹配的已映射文件生效。

Sublime 本身不支持远程连接,所谓“毫秒级同步”是错觉——SFTP 插件本质是保存后触发单向上传,有网络延迟、SSH 握手开销和文件校验,实际耗时通常在 200ms–2s 之间;真要毫秒响应,得换 SSHFS 或 VS Code Remote。
右键没 SFTP 菜单?项目没绑对就白装
插件只在「已加载的项目」中激活右键菜单,不是打开文件夹就行,也不是点空白处或单个文件能触发。
- 必须通过
Project → Add Folder to Project把本地目录加进项目,让它出现在侧边栏顶层 - 右键对象只能是侧边栏里那个文件夹图标本身,不是里面某个
.py文件 - 安装完
SFTP(作者必须是wbond)后,务必重启 Sublime Text,否则Project菜单里都看不到 SFTP 项 - 别选错插件:
sftp-client、FTPSync等仿品不支持Map to Remote和完整配置逻辑
sftp-config.json 放哪、写啥、为啥静默失败
这个文件不是全局配置,而是严格绑定到你右键的那个文件夹根目录下,名字、大小写、扩展名一个都不能错。
- 文件名必须是
sftp-config.json(不能是SFTP-config.json、sftp_config.json或sftp-settings.json) -
remote_path必须以/开头,结尾也建议加/(如"/var/www/html/"),否则路径拼接会偏移 - 密钥登录时,
password字段必须彻底删除,留空字符串("password": "")会导致插件仍走密码认证并失败 - Windows 下
ssh_key_file要用绝对路径:"C:/Users/xxx/.ssh/id_rsa"或双反斜杠:"C:\Users\xxx\.ssh\id_rsa";~展开只在 Linux/macOS 有效
upload_on_save 开了却没传?检查三个隐性条件
upload_on_save: true 不是开关一按就灵,它依赖项目结构、路径匹配和超时容忍度。
-
upload_on_save必须放在配置文件根层级,不能嵌套在files或sync_down_on_open下面 - 当前文件必须属于已保存的项目:
Project → Save Project As…生成.sublime-project,并在其中声明sftp配置块 - 文件路径需匹配
remote_path规则。比如配了"remote_path": "/var/www/html/",但文件在/src/js/app.js,就不会上传——得靠file_regex或调整本地目录结构来对齐 - 默认 3 秒超时,服务器响应慢时会静默失败,加
"timeout": 10提高容忍度
Permission denied 却没报错?控制台才是真相
弹窗提示 “Permission denied” 或直接无声失败,根本不是网络问题,而是 OpenSSH 底层被拦截了。
- 按
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被设为no -
remote_path目录对当前用户不可写(比如www-data用户无权写入/var/www/html/,用ls -ld /var/www/html检查)
真正容易被忽略的是:SFTP 插件没有锁机制、不比对内容哈希、也不感知远程变更——别人改了服务器上的文件,你本地完全不知道;sync_down_on_open: true 只在双击打开时拉一次,不是实时监听。所谓“同步”,只是你单方面保存时的一次性动作。











