SFTP插件报“Permission denied (publickey)”或“550 Permission denied”主因是认证方式不匹配、密钥路径未配置、端口错误、remote_path权限不足或umask导致文件权限异常,需逐项检查sftp-config.json字段及服务器权限设置。

为什么 SFTP 插件报 Permission denied (publickey) 或 550 Permission denied
不是密码错了,也不是服务器没开 SSH,而是 SFTP 插件默认用的认证方式和你的服务器实际要求不匹配。常见组合是:服务器只允许密钥登录,但插件配置里没指定 private_key;或者你用了密码登录,但服务器禁用了密码认证(PasswordAuthentication no);还有一种是路径权限问题——比如你连的是用户 deploy,但目标目录属主是 www-data,且目录权限是 755,导致写入失败。
配置 sftp-config.json 必须填对这 4 个字段
Sublime 的 SFTP 插件靠项目根目录下的 sftp-config.json 工作。光有 host 和 user 不够,下面这些字段漏一个都可能上传失败:
-
"type": "sftp"—— 别写成"ftp"或漏掉 -
"sync_down_on_open": false—— 避免打开文件时意外覆盖本地内容 -
"upload_on_save": true—— 确保保存即同步 -
"private_key": "/Users/you/.ssh/id_rsa"—— 绝对路径,Windows 用双反斜杠或正斜杠,如"C:/Users/you/.ssh/id_rsa"
如果服务器用非标准端口(比如 2222),必须显式加 "port": 2222,否则插件默认走 22,连不上就直接报权限错。
上传后文件属主/权限不对?改 remote_path 和 file_permissions
SFTP 插件不会自动帮你 chown 或 chmod,上传后的文件权限取决于服务器 SSH 用户的 umask 和目标目录权限。如果你需要 PHP 能读、Web 服务能写,得手动干预:
- 确保
"remote_path"指向你有完整写权限的目录(比如/home/deploy/webapp/,而不是/var/www/html/) - 加
"file_permissions": "644"和"dir_permissions": "755"—— 这些值只在上传时生效,不影响已有文件 - 更彻底的办法:在服务器上把你的部署用户加入对应组(如
www-data),并把目标目录设为g+rwX,再配"umask": "002"
调试时打开 SFTP 日志看真实错误
插件界面不报详细错误,但日志会打印每一步的响应。打开 Sublime → Preferences → Package Settings → SFTP → Debug Log,然后上传一次,看控制台输出。重点找这几类线索:
-
Connection refused→ 端口或防火墙问题 -
Authentication failed→ 密钥路径错 / 密码错 / 服务器禁了该认证方式 -
No such file或Failed to create directory→remote_path不存在或父目录没写权限 -
Operation not permitted→ SELinux 或挂载选项(如noexec)拦截
日志里出现 SSH_FX_PERMISSION_DENIED 就说明不是连接问题,是路径或用户权限卡住了,这时候回头检查 remote_path 所属用户和目录 ls -ld 结果最有效。
密钥路径写错、remote_path 拼错、服务器 umask 和目录权限三者叠加,最容易被当成“权限不足”笼统处理。逐项验证比反复重装插件快得多。










