desko: automated backups to rsync.net

This commit is contained in:
2024-07-19 11:42:04 +00:00
parent 31c32b9636
commit 90e1f4a447
8 changed files with 191 additions and 0 deletions

View File

@@ -29,6 +29,7 @@
sane.ovpn.addrV4 = "172.26.55.21";
# sane.ovpn.addrV6 = "fd00:0000:1337:cafe:1111:1111:20c1:a73c";
sane.services.duplicity.enable = true;
sane.services.rsync-net.enable = true;
sane.nixcache.remote-builders.desko = false;

View File

@@ -71,6 +71,8 @@ in
{
"jackett_apikey".owner = config.users.users.colin.name;
"mx-sanebot-env".owner = config.users.users.colin.name;
"rsync-net-env".owner = config.users.users.colin.name;
"rsync-net-id_ed25519".owner = config.users.users.colin.name;
"transmission_passwd".owner = config.users.users.colin.name;
}
];

View File

@@ -22,6 +22,11 @@ in
# documented here: <https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints>
# Github actually uses multiple keys -- one per format
"root@github.com" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl";
# documented: <https://www.rsync.net/resources/fingerprints.txt>
# extract keys with `ssh-keyscan sd1.rsync.net`
# validate fingerprint with `ssh-keyscan sd1.rsync.net | ssh-keygen -l -f -`
"root@*.rsync.net" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINdUkGe6kKn5ssz4WRZKjcws0InbQqZayenzk9obmP1z";
}
]);

View File

@@ -2,5 +2,6 @@
{
imports = [
./duplicity.nix
./rsync-net
];
}

View File

@@ -0,0 +1,51 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sane.services.rsync-net;
sane-backup-rsync-net = pkgs.static-nix-shell.mkBash {
pname = "sane-backup-rsync-net";
pkgs = [
"nettools"
"openssh"
"rsync"
"sane-scripts.vpn"
"sanebox"
];
srcRoot = ./.;
};
in
{
options = with lib; {
sane.services.rsync-net.enable = mkOption {
default = false;
type = types.bool;
};
sane.services.rsync-net.dirs = mkOption {
type = types.listOf types.str;
description = ''
list of directories to upload to rsync.net.
note that this module does NOT add any encryption to the files (layer that yourself).
'';
default = [
"/nix/persist/private"
];
};
};
config = lib.mkIf cfg.enable {
systemd.services.rsync-net = {
description = "backup files to rsync.net";
serviceConfig.ExecStart = "${lib.getExe sane-backup-rsync-net} ${lib.escapeShellArgs cfg.dirs}";
serviceConfig.Type = "simple";
serviceConfig.Restart = "no";
serviceConfig.User = "colin";
serviceConfig.Group = "users";
};
systemd.timers.rsync-net = {
wantedBy = [ "multi-user.target" ];
timerConfig = {
# run 2x daily; at 11:00:00, 23:00:00
OnCalendar = "11,23:00:00";
};
};
};
}

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p bash -p nettools -p openssh -p rsync -p sane-scripts.vpn -p sanebox
# rsync password auth doesn't work with rsync.net.
# ssh keyfile auth *does* work, so i use that.
# for setup, see: <https://www.rsync.net/resources/howto/ssh_keys.html>
# - requires my pubkey to be copied to .ssh/authorized_keys on the remote.
set -x
# secret should include RN_USER
source /run/secrets/rsync-net-env
RN_ID=/run/secrets/rsync-net-id_ed25519
PREFIX=$(hostname)
test -n "$PREFIX" && test -n "$RN_USER" && test -f "$RN_ID"
for dir in "$@"; do
if [[ "$dir" != */ ]]; then
dir="$dir/"
fi
remote_dir="$RN_USER@$RN_USER.rsync.net:$PREFIX$dir"
echo "syncing '$dir' to '$remote_dir'"
# N.B.: the `--exclude=$RN_ID` flag is a noop to get the ID file to be included in the sandbox...
sane-vpn do unmetered rsync --exclude="$RN_ID" -e "ssh -i $RN_ID" --mkpath -arv --delete "$dir" "$remote_dir"
done

View File

@@ -0,0 +1,52 @@
{
"data": "ENC[AES256_GCM,data:SEzx6Cez/QqMEfY548GQ,iv:Shduy7pMXV+vC/eyvWAFoAeD+jklAozw7hhW7e9bDXg=,tag:Dmi4+qdxql7vzogHo+On2Q==,type:str]",
"sops": {
"kms": null,
"gcp_kms": null,
"azure_kv": null,
"hc_vault": null,
"age": [
{
"recipient": "age1tnl4jfgacwkargzeqnhzernw29xx8mkv73xh6ufdyde6q7859slsnzf24x",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1Z3dicktUK1FUb3NBTWFy\nL29KUjFMZE0zZzhmT3NqR2xKOXZ4WUYvK1RJCmdLSDVEczVxRWZnK1ZELytpSmhM\nVmJSdTNYNkpuL1o2UU91eXpZUzUxUVkKLS0tIDdpNGtXVUk3V1N2azBRYjFVVGVQ\nbGZ3T1ZQTDJIWVFyNFZwejJUZUMrVDAKRCv/PsKCHvft0senu9ZirdQ8esYcB+7e\npJy076iPJgH+qXLZaiLXweet0ErER2G/T7pfUJpie/KmO8q8YYHVvg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1j2pqnl8j0krdzk6npe93s4nnqrzwx978qrc0u570gzlamqpnje9sc8le2g",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1cEJOckdxTFpOekZxNUZv\ncmY4Mk1OR2Y3R0pYRmorOW85NEFFaWc0NEhJCnpoZi9kODl1Z25oQ1dnTGhPZ2NV\ncGN2YVFESUoyR3FOWHZYVVF2bDBKUTgKLS0tIE94Tjg1WU4xQXNFa0lQYVhYdFBB\nR3lwWjgza1M1ZDVoU3d3NC8yck9pQ00KBXCxdAq8ZsEFoEHY8FsOwOcd0KTQM4ZU\nESKhMQEtuC7WVf2p6PQTVwGcqU+0hgpbov0XZjoSLhzXnKQMfYli6w==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1z8fauff34cdecr6sjkre260luzxcca05kpcwvhx988d306tpcejsp63znu",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOR3pkZjdsNVllT3Fqbk1W\nSmFWNGxnVTBCZ08xcm5XWXd0ZVlxTTJiMVZVCjJza0M3Mnh5Q0UySE5yUC83b1Qw\nU08zbmZ0QWllRzNCUURYTkJqd1o0WjQKLS0tIGJZSlZ4RjZJMk1seER6MjM3VElW\ndUpDV2hOT1dIMHhKQ1ZQdXpyb2RuT3MKAipgB5NHYeP7/e/rCQevmqmcjCC6LAe2\nZiPoKn75cnT1sdPscoMRE1E246cN11OejFPyBgpfIL+HTJcNmsFFmA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1zsrsvd7j6l62fjxpfd2qnhqlk8wk4p8r0dtxpe4sdgnh2474095qdu7xj9",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTOUp5dW1ZbkphVHhmZWhY\nY3FDTEIvNk9HcithMm9vZnEyM1R0dk9Ec21jCmhPOTdyMVE3aTdDQVJuamFGUzhF\nT0dlVytyZFRzdE55cHB0eUhzR2JBdWsKLS0tIFZTcHIxMFI2Zjc2MnpVeFlCTTlM\nMDlBOHYrV0pTYzZvallINkx6Z0pZd0kK/lZHufkRh/Bm4q5fCPBPdf1aT+9hzA2y\nom0slNf7DNr5ACrjPzxeBu/Sl/0eaImJAU7PyLQUaJ9FtUTUK7vnZg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1hl50ufuxnqy0jnk8fqeu4tclh4vte2xn2d59pxff0gun20vsmv5sp78chj",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiWVNkK3BPeWZYUUFSYjc2\nKzRTS0VVcXlKek5uais2ODgwMm52Y1NnN0V3CjZlUHhQRUZ2eWJ2ZFBEdmEyNjNW\nd2RDaVpPMUw5YXpzWFdxeDYwN0pwSFkKLS0tIEZZRUF5bHd0cjFRUWptZUxYMHhk\nWU5VRVF4djIrV25HRG0rZW5VVVBkKzQKzCQnjY1deI/WIlcgTuZ7/2+N2+EJs2G7\nROOCfx606n0WvDsO/pCUCViPEzCiAuDWatZ413aRs62D9P9W9qUSyQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1vnw7lnfpdpjn62l3u5nyv5xt2c965k96p98kc43mcnyzpetrts9q54mc9v",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQcU9kMzl3VWh3SEt1Ynly\nZS9RbFd2ZnJHQ3grOCtuT3YxcjFRcVlRenhnCno2ZVk1VzFhcHovc3BjM0xxaUlN\nc2ZsUWhzME9DVDVmWG9hdU13VXZtaVkKLS0tIElmTEcrdEdFME1vZXNmMWNsUzhk\naHMxODVIL2Ixa1NCZDBXK24vdUVkSXcKipAwk1/rvLy46Y9MKK/5RTpt6bS0d3eL\nebKI3FXQ4wFejgkAB9+zfxvkpAH57CtBmEklYAZmEUf8gWvs6IPSCQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1w7mectcjku6x3sd8plm8wkn2qfrhv9n6zhzlf329e2r2uycgke8qkf9dyn",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBScTN4NDg4c3gxOVZVakt5\naUszUld4TmpBWStqTEtWQ0o2eGtsMGpZS2hJClVTVE1qaEU4Wk1JSHB5Rmw5ZXRh\nQkNIcUFaUVZLYnVsS2Y5RjNBYWFYQ1UKLS0tIE9VV0psYlcrcU5oTTk4ZHppbHVZ\nZG5XYXJqTG9aM2pyYkJSR284dElTaTgKw7aZ9GOPO01JajPPta5L3cmV5MDMtl8d\n3ucbhj9+8VnKzwQFCNQO9WqQfj3NorU6B2QUulfX3SwIjbYfhQhqYw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tzlyex2z6t88tg9h82943e39shxhmqeyr7ywhlwpdjmyqsndv3qq27x0rf",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5bmlNTHNKRVE1MXJvYXpq\nYjZPYjd2dDdNSGRONE5IZlZVZEVlM05BdGswCit2NzRpa2xXaGp5eVg1Ykw0UWVV\nTXYxVXNzMHVzVmV6VTBlZmkvYi82TmcKLS0tIE53NDhPN3V0cmtSUms1Z0d5aWRQ\nSlhPZStvMmNJYU90REQ4anlNU0NGMDAKbNpXmymQdKC53GxjM21bzrgdh3JfhZIv\nIZSR1GrfV7TS5rwVDQz8iEdtFUy6TRplGmzSUJ4yeBtc4q10AJsESg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age18vq5ktwgeaysucvw9t67drqmg5zd5c5k3le34yqxckkfj7wqdqgsd4ejmt",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPRStIWEIwNGl5cmI2ZVBS\nc0RLRTVlelZ1M3FTMU1RclYybG1ZQ1pXc1VrCjh0N0w1Tld6MC9TRjdyQjBjZjBu\nOUpPZytSR3k2RjRLN3ZGS1BGNjNmb1UKLS0tIFI5dllGVzJ6UFNsUlRDdVA5VmxF\nN2VpM1BzdEhBTzdmeC9CdXlNMjlyeDAKPx/fYwo93WT2Yi0+9MFqAnMYSwKoetoT\n6T0bTtUggkIGE3I19/+JCr0JAXQd/HdJwN2NQ3Wllcd5oWl0IbQicw==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2024-07-19T11:22:47Z",
"mac": "ENC[AES256_GCM,data:Tx97QGPG0ApUmzKIIYPiXGLTTPDHuLiuf7g09MI27UWL8j5R1MXpzem+TSrfAMr14iwN/HM0IWgCrZ17zyVlFDKB0MJkNp16WwJT8YTzi8RnKgb5j02EEiG2+kXiwwhy/4eZw1Qk0IvgOraS2Sb/VcofHajpG0+PmLWx/EhJ/pE=,iv:5Ka+usZ0lqS54MNTUmxXoi5teiLBjXQISfG3aaQknOc=,tag:ueesV8M5PFsPpojDpTQEdA==,type:str]",
"pgp": null,
"unencrypted_suffix": "_unencrypted",
"version": "3.9.0"
}
}

View File

@@ -0,0 +1,52 @@
{
"data": "ENC[AES256_GCM,data:cWHlbm93oLeDQQVESjrQE+ibnu+yVzcT5kT+dqthLNJmRZ5Uwtc+s6yLoFB2PuM+XwY/hBX/RXrAKJqNQir9NyWbLaS2FbJ2gu4xr0lbbBp+qFipgD8J3aEloTfLqWr9LyTxhYkqOPOsbPPMowKkRADPwsQSm6+fvy02Ip1dK4DtTBxGy1f9sdfoWa8GcrzqkkbxAHq8EBVvsPVlPHLavFeH/N08e8rZjl8Uf29Ldq5RUYjflfc5D8+oo4R8SksEL3jyIZQcZUMOXxy7etHQ5Cf4FozI2jVP/2Arf9jdmpZ2nRzSGcgyxtR0mBZUh0jm8J0KCWuHej97gpIEiDZDGh13zDH3iir/FoTpQjY1RaPCoKLwu4bzgp7VuQmu0NQ7ObaXZANEyCHD8mhNB/vaLtkLbsxajVauIUu8E9Y8i2aC7pIL02lfrUssZ++sXiTd18U7+BDKPH9nS2ufboEv9PhVL7Tl7r8EpBiKWS73M9ILrLZkff0q37S+j57JaENRs97ibx8p3Z1PQwQ2mexz,iv:gQsd8odpt3ItChdYKNWwIbooH5w+tFQjOOkZFO9ZA0A=,tag:Z7hPtsWuHl/wllb5NTqmMw==,type:str]",
"sops": {
"kms": null,
"gcp_kms": null,
"azure_kv": null,
"hc_vault": null,
"age": [
{
"recipient": "age1tnl4jfgacwkargzeqnhzernw29xx8mkv73xh6ufdyde6q7859slsnzf24x",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVdTF1R0tSU3hsM1BVNjk0\nemVqZGI2bm4yUENFRGZmeHUvdkhGYVJkZTJjCnlBUG9HMHJIN1k2b2VzbWhuMTRP\nN3FQT3NMbXFCWkhTOUxFZGNoSlJhVkkKLS0tIHlJZVJkTDdCVHRwWDkyN0ovRHRx\nVmRoN0EySEh4UElRazF6U3o1SDhmTHcKD+s+PhZ0pfioxKR0HR8w1M/xE+/NWMiI\nbjrzVhIRC6sizdn8wJnDWwgo2/Q3+Zu3dCql467QPk7c+eSDuJo4IA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1j2pqnl8j0krdzk6npe93s4nnqrzwx978qrc0u570gzlamqpnje9sc8le2g",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0VUtuUk5WK2JKOCttU3Uv\nM2EzZG12NGRmbXBkcWJFQWZMMG4vNm5OL3k0Cnp3U29CekxMV2JvSE53ZmEyc2FB\ncWE1SFJHWGh0cjJwR2dJQnR2dWh4MHMKLS0tIFZwUmhPeHl1U0QwNzNZaCs5Mnlo\nOStLQktFWDlJMExONzZQQ0lCSlRwTEkKvgXikkawmB0dLLuKm1LfICNPILVTzDTI\nxbfBD+HruFjatwxjKz/T3av5UYunBXw4pybFQI8dBZHa+oa5p17w0g==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1z8fauff34cdecr6sjkre260luzxcca05kpcwvhx988d306tpcejsp63znu",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOT0FPZkxiQm93UkwwakFz\nQy9Rc1g3eEVRVllEZGx2T3VERC94Q1JGVVRjCnMwS1R0ZGF1TjlwY0xJQkNCRXV5\nTDRyOVltbGhFTGVGUHY5czR2VzhpVzAKLS0tIGluQklYb2U0RTdFSXd6NURReDJY\nWGgvUUNlaHVwdHFSQlRURzg3SktDb0kKr7gYMCqLt4+vCJadP1spbwZ2WdDzYTf9\nSF+5l1szZQywB7J+aUDTgs8TCntCLmWp1z7FK7RPYBv0XdgTROvv2A==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1zsrsvd7j6l62fjxpfd2qnhqlk8wk4p8r0dtxpe4sdgnh2474095qdu7xj9",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2ei9naE9sd1FaZHZlenNT\naWp3aWhMZzRRSjhuM3VxWVF6Z2wyUE5qNkZFCjlhdzlpOHNGSFAxem1NNFljdEpo\nTGVpTTkrclU0Wk9oZFZTY1Z4WFlCOHMKLS0tIHYzU3htOTB2bmxNelB4cjNsS1gw\nV0FmV1FNL28vV2t1NWltdTZwcXJRbjQKq5X7YsmvIDUTTvOrjwjjLt/DzXig6wsV\nW7/PTxCimGOQf0wgB5u4D8LJf39cbgpZ8PUQzDwtzeXBeLYFtRO4fw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1hl50ufuxnqy0jnk8fqeu4tclh4vte2xn2d59pxff0gun20vsmv5sp78chj",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBubys3YllGMEVlaXp0a0E4\nM21rcldMelNJWGxWRzgyOWprM3ZQU0JNeVg4Ck0xalpWKzhpckxiSmtQamV0dDBV\ncTFBbkxmVlFMMjZ6QVFkeDRJZ3MrUjgKLS0tIDcySzBaTzNiZmFHSmNudVFBTzFF\nSmUwa211MnowS3p2a2QrWGV4SzlQd28KO8Uj6nQKFu7HcUtExtu2yyaTXBKgf0u3\nuSlegey+R5LYsngqZMAWjETkgDbMPerReFmRAbNZhiGcTYB2azgY8Q==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1vnw7lnfpdpjn62l3u5nyv5xt2c965k96p98kc43mcnyzpetrts9q54mc9v",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzTmZWZ3Z5UUtOZG0wbTVH\nSU1CbGVJR2ExTGs1RlNXd1dkOUJWWlRNWjNjCmZaTFc4N1pkSEtXTm1peDZuUUc5\ndmVjZVExWFFMQ3N0eEllVDJnck05SEkKLS0tIGQvdTcxcmNsTDZ0R1U0b2R6WGYz\nRXhTR09yc29kRmpGRElhNlZrYS83SWsK1n+mE+iq6LaY4HNUy4nJj+Iw8q8SW/vr\nRKj3GTUBfUpt3P0NpMQbCv2eB347Yp76MnYJ+gUxqthxiH6+oU8gTA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1w7mectcjku6x3sd8plm8wkn2qfrhv9n6zhzlf329e2r2uycgke8qkf9dyn",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKMTJKK0J0YmdLQmpURWNK\nNTJGdkhXbmhFeDRvMklxYW5NYmJjZGZQY1VFClhKME1iYis3TjV2ajRqdEpJWVgr\nUS9iZWpOdmNJTW1jZUNDNEkzbWtKM3cKLS0tIFF5RkZUNXVJMXJaTUNCOVNOems1\nUUZyOGZwbkc2bFBDbTZiWUMyZFc3RWcK3AEhsFRxY6bkSRrWIHYVNcSJSi/kCt/A\nU4unOXjzLZD23pVWSZOxcjm18C3skOn81MrSjzmgVeCVgxmO4Iw5dA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tzlyex2z6t88tg9h82943e39shxhmqeyr7ywhlwpdjmyqsndv3qq27x0rf",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2ajRuUnozVUxpS2FIZDRY\nOGJLYTJPWDQ3MlZtSkkxbWhJcnU3YnFVU3o0Cm9JcmQ1bElEZ2JEbktWUjJITnh2\nVEpiU1VLeStqUXU0V1J6N1BOY0hZQVkKLS0tIHdKQVRsOXBmL2FCQ3NCUzM3MEhr\nYkgyQUVLRVdGYnoxUC9Nc0QrbXMrTVUKUzOqFxtan8lKKbW2F6H902frbDBqdo5M\nZrH0dbfmQmohJlcJJvMOLdo5Q0rFTRrO51gdDXVc7PO4mBJnfNQmJA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age18vq5ktwgeaysucvw9t67drqmg5zd5c5k3le34yqxckkfj7wqdqgsd4ejmt",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtMGpsd1NZeUIwS014YU9j\nWXpaRGxVNHRFL1phYWZERWUyOVpyYm5SYm1vCmVRb2cwMGFHT2p5b09zQTRsZE0w\nUnZzdWFTcnAxSVV2TGRQR29xcmlySWMKLS0tIEtUMGdJSk91VVl4Ry9sYmFmbktT\ncVRuVVVlSjJFcEt2VVZCZFd5YmRGSjQKt5kRSuRCZe1U9N/1d3PU4BESzo+Vx8Is\ntRX52zldEcqfbWv2NGccLoIw6VURbiNImhDPI/xrUWuXBn8ftv4soQ==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2024-07-19T11:02:29Z",
"mac": "ENC[AES256_GCM,data:SHxJvum6uFN9sDTZ5i7Z4Qke0yMVLj9zVBai5ZbsbBjsiwiWMDlRjcFFLjgCt28Ip6Inz8QNVvDVWZrgo9nGEYGwA7xYsmqcCvHsXRlNOzI9T2dM+DmS05FaC5dQP4EVMWrp5zHNQDHXMDBoobP8Owo64WPHM6aWkzBzDMJz/rY=,iv:TPbYA8Ahb7dhE1F3NZO9LR7jv8/gUnidw/tDo5mYJRg=,tag:4J1YgGPaX7yvIe+Nkn33Hg==,type:str]",
"pgp": null,
"unencrypted_suffix": "_unencrypted",
"version": "3.9.0"
}
}