连接失败时先看错误类型再排查:Connection timeout查网络层,Authentication failed查凭据或密钥格式(Windows需.ppk),Host key verification failed是服务器公钥变更;远程目录无写权限、ignore_regexes正则误配也会导致静默失败。

连接失败时先看错误类型,再决定查哪一层
Sublime 的 SFTP 插件报错不统一,但常见错误基本就三类:Connection timeout、Authentication failed、Host key verification failed。它们对应完全不同的排查路径:
-
Connection timeout:网络层问题,重点查host、port、防火墙、SSH 服务是否真在运行(不是只开了 FTP) -
Authentication failed:凭据或认证方式错,比如用了 OpenSSH 私钥却没转成.ppk(Windows 下必须),或密码输错但被缓存了旧会话 -
Host key verification failed:服务器 SSH 公钥变了(重装系统、换 IP、虚拟机快照回滚都可能触发),不是安全漏洞,是插件默认严格校验
Windows 下用密钥登录必须转 .ppk,OpenSSH 私钥直接填会失败
Sublime 的 SFTP 插件在 Windows 上不认原生 id_rsa,只支持 PuTTY 格式(.ppk)。哪怕你用 ssh-keygen 生成了密钥,也得用 PuTTYgen 转一次:
- 打开
PuTTYgen→ Load → 选你的id_rsa(注意不是id_rsa.pub) - 点击
Save private key,保存为id_rsa.ppk - 在
sftp-config.json中写:"ssh_key_file": "C:/path/to/id_rsa.ppk"(注意 Windows 路径用正斜杠或双反斜杠)
如果跳过这步,配置里写 "private_key": "/home/user/.ssh/id_rsa" 是无效的,插件根本不会读。
远程目录权限不够会导致上传静默失败,不是报错而是卡住
即使连接成功、认证通过,SFTP 上传文件也可能“看起来没反应”——实际是远程目录没有写权限。典型表现是:Ctrl+S 后无提示,右键 SFTP → Upload File 也无响应,输出面板(Tools → SFTP → Show Output)里只显示 uploading... 然后停住。
- 检查
remote_path对应的服务器路径是否存在:ls -ld /var/www/html/project - 确认用户对该目录有写权限:
sudo chown -R $USER:$USER /var/www/html/project或sudo chmod 755 /var/www/html/project - 如果用的是
root用户,确保没启用requiretty(某些云主机默认开启,会阻断非交互式 SFTP 写入)
忽略规则写错会让整个项目同步失效,尤其注意正则末尾斜杠
ignore_regexes 是数组,每项是正则字符串,但 Sublime 的匹配逻辑很“字面”:它匹配的是**完整路径相对 remote_path 的部分**。比如你设了 "remote_path": "/var/www/html",本地改了 src/js/main.js,那插件实际比对的是 src/js/main.js 这个字符串。
- 想忽略整个
node_modules文件夹,要写"node_modules/"(带斜杠),否则"node_modules"会误杀package.json里含该字符串的所有行 - 想忽略所有隐藏文件,
"^\\."比"\\.git"更安全;而"\\.git*"会意外匹配gitlab-ci.yml - 别把
sftp-config.json加进忽略列表——它本身是配置文件,删了就断连
最稳妥的做法是先清空 ignore_regexes,确认基础同步正常,再一条条加规则并测试。
真正卡住人的从来不是“怎么连”,而是“连上了为什么不动”。权限、密钥格式、正则边界、主机密钥变更——这些点看似零碎,但每个都足以让同步彻底静默失效。动手前先看输出面板,比瞎猜快十倍。










