30 lines
1.0 KiB
Markdown
30 lines
1.0 KiB
Markdown
# 2026-06-01 远程写入 SFTP 权限回退 SSH tee/mv
|
|
|
|
## 摘要
|
|
|
|
解决编辑器保存时报 `SFTP 写入失败: Permission denied`:在 SFTP 无文件写权限但目录可写(或需 sudo)时,自动回退 SSH `tee`、临时文件 `mv` 覆盖、以及 `sudo -n`。
|
|
|
|
## 动机
|
|
|
|
许多生产文件属主为 root、权限 644,SFTP 无法直接 `open(wb)`,但目录可写时可通过 `mv` 替换;部分环境需免密 sudo。
|
|
|
|
## 涉及文件
|
|
|
|
| 文件 | 变更 |
|
|
|------|------|
|
|
| `server/infrastructure/ssh/asyncssh_pool.py` | `remote_write_bytes()` |
|
|
| `server/api/sync_v2.py` | upload / write-file 使用统一写入 |
|
|
|
|
## 迁移 / 重启
|
|
|
|
`supervisorctl restart nexus`
|
|
|
|
## 验证方式
|
|
|
|
1. 编辑 root 属主且目录可写的配置文件 → 保存成功。
|
|
2. 若仍失败,在目标机为 SSH 用户配置对该路径的写权限或 `NOPASSWD: /usr/bin/tee, /usr/bin/mv`。
|
|
|
|
## 补充(同日)
|
|
|
|
- SSH `tee` 回退时 `conn.run(input=bytes)` 需 `encoding=None`,否则报 `utf_8_encode() argument 1 must be str, not bytes`。
|