age使用方法
$ age-keygen -o key.txtPublic 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 # 解密压缩包
脚本内容
注意事项
- 是借助git lfs存储文件的, 所以需要先配置好huggingface仓库 ssh 秘钥
- 安装好 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 "$@"