upload_on_save后远程文件权限为600是因sftp插件默认使用ssh用户umask(077),需在sftp-config.json根层级显式配置"default_permissions": "644";ssh_key_file不支持~展开,须用绝对路径;remote_path必须以/开头且对应真实可写目录;所有配置生效前提为通过project→add folder to project将本地文件夹加入项目并置于侧边栏顶层。

Sublime Text 本身不处理远程访问权限,所谓“访问权限”实际是 SSH 层或文件系统层的控制问题,配置错一点就卡在 Authentication failed 或 Permission denied (publickey)。
为什么 upload_on_save 后远程文件变成 600 权限?
SFTP 插件默认上传文件时使用 SSH 用户的 umask(通常是 077),结果远程文件权限被设为 600,Web 服务(如 Nginx/Apache)无法读取。这不是 Sublime 的 bug,而是 SFTP 协议未显式指定权限位时的默认行为。
- 必须在
sftp-config.json根层级加"default_permissions": "644"(对文件)或"default_directory_permissions": "755"(对新建目录) - 注意:该配置只影响新上传/创建的文件,不会修改已有文件权限
- 如果服务器上运行的是 PHP-FPM 或其他以不同用户身份执行的服务,还需确保组权限和
setgid位匹配,仅靠default_permissions不够
SSH 密钥路径写错导致认证失败
很多人把 ssh_key_file 写成 "~/.ssh/id_rsa",但 SFTP 插件不做 shell 展开,会字面量拼接路径,最终尝试读取服务器上的 /home/user/~/.ssh/id_rsa —— 显然不存在。
- 必须用绝对路径,例如
"/home/deploy/.ssh/id_rsa"(Linux)或"C:\Users\User\.ssh\id_rsa"(Windows + WSL) - 私钥文件权限必须是
600(Linux/macOS),否则 OpenSSH 拒绝加载:chmod 600 /path/to/id_rsa - 不要同时填写
password和ssh_key_file,SSH 层会直接拒绝连接,错误提示只有模糊的Authentication failed
remote_path 路径不以 / 开头引发静默同步失败
remote_path 是路径拼接的基准,若写成 "var/www/html"(缺开头 /),SFTP 插件会把它当作相对路径,拼到用户主目录下,比如 /home/deploy/var/www/html —— 这通常不是你想要的位置,且右键菜单里 Browse Server 可能显示空目录或报错 No such file。
-
remote_path必须以/开头,推荐也以/结尾,例如"/var/www/html/" - 它必须对应真实存在的、SSH 用户有读写权限的目录;用
ssh deploy@server 'ls -ld /var/www/html'验证权限和归属 - 如果目标目录属 root,但你用普通用户登录,需提前配置
sudoers或改用 root 登录(不推荐)
最容易被忽略的一点:所有路径相关配置(remote_path、ssh_key_file)都依赖于你是否通过 Project → Add Folder to Project 把本地文件夹加进项目,且该文件夹图标必须出现在侧边栏最顶层——否则插件压根不加载配置,upload_on_save 形同虚设。











