Skip to content

Feature/rclone backup#68

Open
AkarinLiu wants to merge 2 commits intokejilion:mainfrom
AkarinLiu:feature/rclone-backup
Open

Feature/rclone backup#68
AkarinLiu wants to merge 2 commits intokejilion:mainfrom
AkarinLiu:feature/rclone-backup

Conversation

@AkarinLiu
Copy link
Contributor

@AkarinLiu AkarinLiu commented Nov 19, 2025

注意:此次更新为破坏性变更,可能需要重新配置备份账号。

@kejilion
Copy link
Owner

kejilion commented Feb 9, 2026

@MonkeyCode-AI 检查下

@MonkeyCode-AI
Copy link

MonkeyCode-AI 正在分析任务...

Copy link

@MonkeyCode-AI MonkeyCode-AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我是 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 ⚠️ Warning 💡 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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

🚨 将用户输入的 rclone 目标路径用于本地文件名,可能包含“/”导致写文件失败或路径穿越

使用 wget -O ${use_rclone}_beifen.sh 生成脚本文件名,但 use_rclone 预期为 rclone:backup/ldnmp 这类路径,包含 :/。会导致本地文件名非法/被解析为目录层级,wget 失败或写入意外目录;并存在路径穿越风险(如 ../../tmp/x)。属于功能性错误且有安全隐患。

建议: 不要用远端路径当文件名;改为固定文件名(如 beifen_rclone.sh),并在 sed/cron 中引用该固定文件名。

Suggested change
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"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

🚨 rclone copy 传参错误:使用了不带路径的文件名,且变量未加引号

rclone copy $backup_filename "$backup_path":上文备份文件路径是 /home/$backup_filename,但这里只传文件名,工作目录不一定是 /home,易找不到文件上传失败;$backup_filename 未加引号可能被拆词;backup_path 未校验,失败仍可能打印“已上传”。

建议: 使用绝对路径并对变量加引号;上传后检查返回码,失败时提示错误并不要误报成功。

Suggested change
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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

🚨 crontab 调用仍使用基于 use_rclone 的脚本名,修复文件名后需同步更新

cron 行为 ./${use_rclone}_beifen.sh,与“把 use_rclone 当文件名”的错误强耦合;若改为固定脚本名而此处不更新,会导致定时任务找不到脚本并静默失败。

建议: 统一改为固定脚本名(如 $HOME/beifen_rclone.sh),并使用绝对路径或确保在固定目录执行。

Suggested change
(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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

🚨 crontab 调用仍使用基于 use_rclone 的脚本名(每天备份分支)

每天备份分支同样使用 ./${use_rclone}_beifen.sh,会持续导致脚本名非法/找不到脚本而任务失败。

建议: 同上,改为固定脚本名并使用绝对路径。

Suggested change
(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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants