sublime text 本身不支持 ftp/sftp,必须依赖 sftp 插件;90% 的“连不上”源于未重启、项目未绑定、sftp-config.json 未通过右键“map to remote…”在项目根目录自动生成,或认证字段冲突。

Sublime Text 本身不支持直接连接云服务器,必须依赖 SFTP 插件(wbond 官方版)调用系统 ssh 和 sftp 命令完成底层通信;90% 的“连不上”问题不是插件坏了,而是项目未绑定、配置文件位置/命名错误,或 SSH 认证链路在插件层面被拒绝——它不复用 ssh-agent,每次都是全新握手。
右键没有 SFTP 菜单?先确认项目和文件夹是否“被识别”
插件菜单只在特定上下文中激活,不是安装完就自动出现:
- 必须通过
Project → Add Folder to Project把本地目录加进项目,让它显示在侧边栏顶层;仅用File → Open Folder不行 - 右键对象只能是侧边栏中那个**文件夹图标本身**,不能点空白处、不能点文件、不能点未保存的
untitled标签页 - 安装完
SFTP后必须重启 Sublime Text,否则菜单项不会注册到Project下拉里 - 确保安装的是作者为
wbond的SFTP,别选sftp-client或FTPSync等仿制品
sftp-config.json 放哪、怎么写、为什么总静默失败
这个文件不是全局配置,而是严格绑定到你右键的那个文件夹根目录下,错一个字符就失效:
- 文件名必须是
sftp-config.json(全小写、带短横线、.json 扩展名),SFTP-config.json、sftp_config.json、sftp-settings.json都不行 - 必须放在项目根目录(即你右键的那个文件夹下),不能放在子目录或
~/Library/Application Support/Sublime Text/Packages/User里 -
remote_path必须以/开头,结尾也建议加/(如"/var/www/html/"),否则路径拼接会偏移 - 用密钥登录时,
password字段必须彻底删除,留空字符串("password": "")也会触发密码认证并失败 -
ssh_key_file支持~展开(如"~/.ssh/id_rsa"),但不识别$HOME或其他环境变量
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提高容错,但别设太高,否则失败反馈更滞后
上传失败却没报错?必须看 SFTP 控制台的真实日志
弹窗提示模糊(比如只说 Permission denied)或完全无声失败,是因为插件把底层 ssh 错误吞掉了:
- 按
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目录对当前用户不可写(注意:不是“能否 ssh 登录”,而是“该用户对该路径是否有写权限”)
最易被忽略的是:插件每次都是全新调用系统 ssh 命令,不继承终端里的 ssh-agent 状态,也不读取 ~/.ssh/config 别名或 ProxyJump 配置。云服务器若走跳板机或需自定义端口转发,得手动在 sftp-config.json 里补全 host、port、ssh_key_file,不能图省事靠本地 ssh 别名“自动适配”。











