Conversation
|
@MonkeyCode-AI 检查下 |
|
MonkeyCode-AI 正在分析任务... |
MonkeyCode-AI
left a comment
There was a problem hiding this comment.
我是 MonkeyCode AI 编程助手,你可以在 GitHub 仓库的 PR 中 at @MonkeyCode-AI 来呼唤我。
任务执行细节请参考: https://monkeycode-ai.com/tasks/public?id=902b7659-a80a-49af-877e-89b7948e9f74
代码审查结果
备份链路从 scp/sshpass 切换到 rclone 的方向正确,但当前实现存在脚本文件名/路径处理不安全、rclone 调用参数错误与若干边界问题,需修复后再合并。
✨ 代码亮点
- 将备份传输从明文密码+sshpass 的 scp 迁移到 rclone,更利于支持多种云存储并降低密码硬编码风险
- 在安装依赖中补充 rclone,减少运行时缺包概率
| 🚨 Critical | 💡 Suggestion | |
|---|---|---|
| 4 | 0 | 0 |
| cd ~ | ||
| wget -O ${useip}_beifen.sh ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/beifen.sh > /dev/null 2>&1 | ||
| chmod +x ${useip}_beifen.sh | ||
| wget -O ${use_rclone}_beifen.sh ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/beifen.sh > /dev/null 2>&1 |
There was a problem hiding this comment.
Caution
🚨 将用户输入的 rclone 目标路径用于本地文件名,可能包含“/”导致写文件失败或路径穿越
使用 wget -O ${use_rclone}_beifen.sh 生成脚本文件名,但 use_rclone 预期为 rclone:backup/ldnmp 这类路径,包含 : 和 /。会导致本地文件名非法/被解析为目录层级,wget 失败或写入意外目录;并存在路径穿越风险(如 ../../tmp/x)。属于功能性错误且有安全隐患。
建议: 不要用远端路径当文件名;改为固定文件名(如 beifen_rclone.sh),并在 sed/cron 中引用该固定文件名。
| wget -O ${use_rclone}_beifen.sh ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/beifen.sh > /dev/null 2>&1 | |
| read -e -p "请输入备份路径(如 rclone:backup/ldnmp ): " use_rclone | |
| cd ~ | |
| local backup_script="beifen_rclone.sh" | |
| wget -O "$backup_script" ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/beifen.sh > /dev/null 2>&1 | |
| chmod +x "$backup_script" | |
| sed -i "s#rclone:backup#${use_rclone}#g" "$backup_script" |
| break | ||
| ;; | ||
| read -e -p "输入云端存储路径(如 rclone:backup/ldnmp ):" backup_path | ||
| rclone copy $backup_filename "$backup_path" |
There was a problem hiding this comment.
Caution
🚨 rclone copy 传参错误:使用了不带路径的文件名,且变量未加引号
rclone copy $backup_filename "$backup_path":上文备份文件路径是 /home/$backup_filename,但这里只传文件名,工作目录不一定是 /home,易找不到文件上传失败;$backup_filename 未加引号可能被拆词;backup_path 未校验,失败仍可能打印“已上传”。
建议: 使用绝对路径并对变量加引号;上传后检查返回码,失败时提示错误并不要误报成功。
| rclone copy $backup_filename "$backup_path" | |
| read -e -p "输入云端存储路径(如 rclone:backup/ldnmp ):" backup_path | |
| local backup_file="/home/$backup_filename" | |
| if [ -z "$backup_path" ]; then | |
| echo "错误: 请输入云端存储路径。" | |
| continue | |
| fi | |
| if rclone copy "$backup_file" "$backup_path"; then | |
| echo "备份文件已上传至云端存储。" | |
| else | |
| echo "错误: 上传失败,请检查 rclone 配置与目标路径。" | |
| fi |
| check_crontab_installed | ||
| read -e -p "选择每周备份的星期几 (0-6,0代表星期日): " weekday | ||
| (crontab -l ; echo "0 0 * * $weekday ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 | ||
| (crontab -l ; echo "0 0 * * $weekday ./${use_rclone}_beifen.sh") | crontab - > /dev/null 2>&1 |
There was a problem hiding this comment.
Caution
🚨 crontab 调用仍使用基于 use_rclone 的脚本名,修复文件名后需同步更新
cron 行为 ./${use_rclone}_beifen.sh,与“把 use_rclone 当文件名”的错误强耦合;若改为固定脚本名而此处不更新,会导致定时任务找不到脚本并静默失败。
建议: 统一改为固定脚本名(如 $HOME/beifen_rclone.sh),并使用绝对路径或确保在固定目录执行。
| (crontab -l ; echo "0 0 * * $weekday ./${use_rclone}_beifen.sh") | crontab - > /dev/null 2>&1 | |
| (crontab -l ; echo "0 0 * * $weekday $HOME/beifen_rclone.sh") | crontab - > /dev/null 2>&1 |
| check_crontab_installed | ||
| read -e -p "选择每天备份的时间(小时,0-23): " hour | ||
| (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 | ||
| (crontab -l ; echo "0 $hour * * * ./${use_rclone}_beifen.sh") | crontab - > /dev/null 2>&1 |
There was a problem hiding this comment.
Caution
🚨 crontab 调用仍使用基于 use_rclone 的脚本名(每天备份分支)
每天备份分支同样使用 ./${use_rclone}_beifen.sh,会持续导致脚本名非法/找不到脚本而任务失败。
建议: 同上,改为固定脚本名并使用绝对路径。
| (crontab -l ; echo "0 $hour * * * ./${use_rclone}_beifen.sh") | crontab - > /dev/null 2>&1 | |
| (crontab -l ; echo "0 $hour * * * $HOME/beifen_rclone.sh") | crontab - > /dev/null 2>&1 |
注意:此次更新为破坏性变更,可能需要重新配置备份账号。