Logo
2 mins
分享一个脚本: 加密备份网站 /目录到huggingface

该脚本使用age工具加密指定 目录并推送到Git仓库,需预先配 置SSH密钥和安装age。包含检查SSH连 接、验证age命令、清理临时文件 及备份加密功能。

分享一个脚本: 加密备份网站  /目录到huggingface

age使用方法

Terminal window
$ age-keygen -o key.txt
Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p #公钥
$ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age # 加密文件
$ age --decrypt -i key.txt -o data.tar.gz data.tar.gz.age # 解密压缩包

脚本内容

注意事项

  1. 是借助git lfs存储文件的, 所以需要先配置好huggingface仓库 ssh 秘钥
  2. 安装好 age 命令
#!/bin/bash
#
# 备份和加密指定目录,然后将其推送到 Git 仓库。
set -euo pipefail
export GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
check_ssh_connection() {
if ! ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -T git@hf.co | grep -q meleuo; then
echo "登录失败" >&2
exit 1
fi
}
check_age_command() {
if ! command -v age &> /dev/null; then
echo "age 命令不可用" >&2
exit 1
fi
}
cleanup() {
local uuid=$1
if [[ -d /tmp/${uuid} ]]; then
rm -rf "/tmp/${uuid}"
fi
}
backup_and_push() {
local dir_path=$1
local taskname=$2
local dir_name
dir_name=$(basename "${dir_path}")
local uuid
uuid=$(openssl rand -hex 16)
local datetime
datetime=$(date +"%Y%m%d%H%M")
local archive_name="${taskname}_${uuid}_${datetime}.tar.gz"
local encrypted_name="${taskname}_${datetime}.bin"
mkdir "/tmp/${uuid}"
cd "/tmp/${uuid}" || exit 1
if ! tar -czf "${archive_name}" -C "$(dirname "${dir_path}")" "$(basename "${dir_path}")"; then
echo "压缩失败" >&2
cleanup "${uuid}"
exit 1
fi
if ! tar cvz "${archive_name}" | age -r [age] > "${encrypted_name}"; then
echo "加密失败" >&2
cleanup "${uuid}"
exit 1
fi
echo "压缩和加密完成: ${encrypted_name}"
GIT_LFS_SKIP_SMUDGE=1 git clone git@[huggingface仓库地址]
cd b || exit 1
mkdir -p "${taskname}"
mv "../${encrypted_name}" "./${taskname}/${dir_name}${datetime}.bin"
git add "./${taskname}/${dir_name}${datetime}.bin"
git commit -m "ADD ${taskname}/${dir_name}${datetime}.bin"
git push
cleanup "${uuid}"
}
main() {
check_ssh_connection
check_age_command
docker stop nginx
backup_and_push /var/html/www nginx_back
docker start nginx
}
main "$@"