SFTP上传静默卡住主因是remote_path目录无写权限;需用SSH执行ls -ld确认属主,若非当前用户则运行sudo chown -R $USER:$USER /path,同时检查default_permissions配置、密钥权限(chmod 600)及ignore_regexes匹配逻辑。

remote_path目录没有写权限导致静默失败
上传不报错、没提示、控制台只显示“uploading”就卡住,十有八九是远程目录权限不够。SFTP插件不会主动告诉你“Permission denied”,而是直接挂起。
- 用 SSH 登服务器执行
ls -ld /var/www/html/,确认该路径存在且属主是你当前登录的user - 如果属主是
www-data或root,运行sudo chown -R $USER:$USER /var/www/html/(Linux/macOS)或联系运维加组权限 - Windows 服务器上注意 IIS 或 Apache 用户是否对目标目录有写入权限,不能只看文件资源管理器里的“用户权限”
- 某些云主机默认启用
requiretty,会导致非交互式 SFTP 写入失败,需在/etc/sudoers中注释掉该行
default_permissions没设导致网页打不开
即使上传成功,PHP/HTML 文件在浏览器里 403 或 500,常因权限掩码不对。SFTP 插件默认用系统 umask(通常是 022),上传后变成 644/755,但某些 Web 服务要求更严格。
- 在
sftp-config.json根层级添加字段:"default_permissions": "644"(文件)和"folder_default_permissions": "755"(目录) - 别写成数字
644,必须是字符串"644",否则插件忽略 - 如果服务器强制 umask=002(如多人协作环境),可设为
"664"和"775",并确保组内用户有对应权限
SSH 密钥权限错误触发 OpenSSH 拒绝读取
配置写对了,host、user、ssh_key_file 全都正确,但连接时直接报 Authentication failed —— 很可能是密钥文件权限太宽松。
- Linux/macOS 下执行
chmod 600 ~/.ssh/id_rsa(不是644,OpenSSH 要求私钥不可被组/其他用户读) - Windows 上必须用 PuTTYgen 转成
.ppk格式,原生id_rsa无效;路径写"C:/Users/You/.ssh/id_rsa.ppk",正斜杠或双反斜杠均可 -
ssh_key_file字段值必须是绝对路径,~可展开,但$HOME不识别 - 删掉配置里的
password字段——哪怕留空字符串"password": "",插件也会尝试密码认证并覆盖密钥路径
ignore_regexes 匹配逻辑反直觉引发同步失效
加了 "ignore_regexes": [".git", "node_modules"] 却发现整个项目都不上传了,问题出在匹配方式:它比对的是**相对于 remote_path 的相对路径字符串**,不是完整本地路径。
- 假设
"remote_path": "/var/www/html/",你改了src/js/app.js,插件实际拿src/js/app.js去匹配正则 - 想忽略
node_modules目录,得写"node_modules(/|$)",末尾加(/|$)防止误杀node_modules_bak - 忽略所有隐藏文件,用
"^\."(注意双反斜杠转义),不是"^."或".*" - 正则写错不会报错,只会静默跳过匹配项——打开
Tools → SFTP → Show Output看实时日志才能确认是否被忽略
SFTP: Show Console,再查权限和路径,比反复改配置快得多。


















