能实现实时同步,但必须配置watcher+autoUpload,uploadOnSave仅响应保存操作,不处理重命名/删除;watcher需手动添加并启用autoDelete,且remotePath须为无尾斜杠的绝对路径。

能实现,但“实时”有严格前提:必须用 watcher + autoUpload,且 uploadOnSave 仅触发单文件上传,不处理重命名/删除。
为什么 uploadOnSave 不等于实时同步
uploadOnSave 只在你按 Ctrl+S 或 Cmd+S 时上传当前文件,它不监听文件系统事件。这意味着:
- 你在本地重命名一个
utils.js→helpers.js,远程仍留着旧文件,不会自动删或改名 - 你删除本地某个配置文件,远程对应文件不受影响
- 你在终端用
mv或rm操作文件,uploadOnSave完全无感知
真正覆盖“修改、重命名、删除”三类操作的,是 watcher 配置块,不是 uploadOnSave。
watcher 必须手动写进 .sftp.json,且 autoDelete 要显式开启
VSCode 的 SFTP: Config 命令生成的默认配置里 不包含 watcher。你得自己加进去,否则连“实时”边都摸不到。
正确写法示例(放在 .sftp.json 根对象下):
{
"host": "192.168.1.100",
"username": "ubuntu",
"remotePath": "/home/ubuntu/myapp",
"uploadOnSave": true,
"watcher": {
"files": "**/*",
"autoUpload": true,
"autoDelete": true
},
"ignore": [".git/**", ".DS_Store", "node_modules/**"]
}
注意点:
-
files用 glob,"**/*"表示递归监听所有文件;若只想监项目 src 目录,写"src/**/*" -
autoDelete: true是关键——没有它,本地删文件,远程就残留,后续可能引发运行时错误 -
watcher启用后需重启 VSCode 窗口才生效,热重载不触发
密钥登录失败?privateKeyPath 路径和权限是两大雷区
密码登录越来越不被推荐,但密钥方式一旦配错,错误提示极其模糊,常见于:
-
privateKeyPath值写成相对路径(如"./id_rsa"),实际必须是绝对路径("/Users/xxx/.ssh/id_ed25519") - 私钥文件权限太宽松(比如
chmod 755),OpenSSH 会直接拒绝加载,报Permissions for 'xxx' are too open - 服务器端
/etc/ssh/sshd_config没开PubkeyAuthentication yes,或用户家目录.ssh权限不是700
验证密钥是否可用的最快方式:终端执行 sftp -i /your/private/key -P 22 user@host,能连上再配插件。
remotePath 末尾不能加斜杠,且必须是绝对路径
这是最常被忽略的格式细节。写成 "/home/user/project/"(结尾带 /)会导致同步目标变成 //home/user/project//file.js,路径双斜杠触发异常,部分服务器直接拒绝写入。
同时,remotePath 不能是相对路径(如 "project"),也不能含环境变量(如 "$HOME/project"),必须是完整绝对路径,例如:
- ✅
"/var/www/html" - ✅
"/home/ubuntu/myapp" - ❌
"/home/ubuntu/myapp/"(结尾斜杠) - ❌
"myapp"(相对路径)
如果远程路径涉及软链接,确保 SSH 用户对该链接及其真实目标都有读写权限——watcher 依赖的是文件系统事件,不是路径字符串。


















