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

Sublime Text 本身不支持远程连接,装了 SFTP 插件也不代表能连上——90% 的失败都卡在项目没绑定、配置路径错位或 SSH 认证链路断开这三个环节。
右键没 SFTP 菜单?先确认项目和插件是否真正激活
插件不会在任意场景下响应:它只在「已加载项目」且「侧边栏顶层显示一个文件夹」时才挂载右键菜单。不是打开单个文件、不是空白编辑区、也不是“打开文件夹”这种临时视图。
- 必须通过 Project → Add Folder to Project 把本地目录加进项目,让它出现在侧边栏最顶层
- 右键操作对象只能是那个文件夹图标本身,不是里面的文件,也不是侧边栏空白处
- 安装完 SFTP 后必须重启 Sublime Text —— Package Control 不会热加载 GUI 菜单项
- 确保安装的是作者为
wbond的SFTP(别选sftp-client或FTPSync)
sftp-config.json 放哪、怎么写、为什么总静默失败
这个文件不是全局配置,而是严格绑定到你右键的那个文件夹根目录下。名字、大小写、扩展名一个都不能错:必须叫 sftp-config.json,不能是 SFTP-config.json、sftp_config.json 或 sftp-settings.json。
-
remote_path必须以/开头,结尾也建议加/(如"/var/www/html/"),否则路径拼接会偏移 -
ssh_key_file支持~展开(如"~/.ssh/id_rsa"),但不识别$HOME或其他环境变量 - 用密钥登录时,
password字段必须完全删除;留空字符串("password": "")会导致插件仍走密码认证并失败 - Windows 路径要用正斜杠或双反斜杠:
"C:/Users/xxx/.ssh/id_rsa"或"C:\Users\xxx\.ssh\id_rsa"
上传失败却没报错?看控制台日志才是真因
弹窗提示 “Permission denied” 或直接无声失败,根本不是网络问题,而是 OpenSSH 底层被拦截了。插件不复用终端里的 ssh-agent,也不继承你的免密登录状态。
- 按
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)
upload_on_save 设为 true 却没上传?路径匹配和上下文才是关键
upload_on_save 只是个触发器,真正决定是否上传的是当前文件是否属于已映射的项目上下文,以及其相对于本地根路径的子路径能否与 remote_path 对齐。
-
upload_on_save必须写在sftp-config.json的根对象层级,不能嵌套在files或sync_down_on_open下面 - 当前编辑的文件路径必须落在项目根目录(或
local_path)下;比如配了"remote_path": "/var/www/html/",但你在编辑src/js/app.js,那它不会被上传 - 如果服务器响应慢或网络抖动,SFTP 插件默认 3 秒超时,可加
"timeout": 10提高容忍度 - 多人协作或服务端被其他方式修改时,
upload_on_save没有锁、没有版本比对、也没有冲突解决能力,极易覆盖内容
最常被忽略的是:即使你在终端能免密 ssh 登录,SFTP 插件也不会复用 ssh-agent;它每次都是全新调用系统 ssh 命令,所以本地 ssh -i /path/to/key user@host 能通,才是插件能通的前提。











