Шифровани копия на OpenClaw: архивиране по график
Личният ти AI асистент пази в себе си достъпи до чат канали, профили за вход и цялата си история. Загубата му е болезнена, а нешифрованото копие е още по-лошо. Ще направим нощно копие с вградената команда на OpenClaw, ще го шифроваме, ще го пазим по ясно правило и ще репетираме възстановяването, преди да ни потрябва.
openclaw backup)🔒 локално
age (шифроване)🔒 локално
systemd · cron🔒 локално
Отдалечено хранилище (по избор)🌐 извън машината
tar папките ~/.openclaw и ~/.npm-global и ги качваше в облачно хранилище без шифроване. Но в ~/.openclaw има достъпи до канали и доставчици, профили за вход и сесии — всеки, който види архива, получава тях. Сега архивът е шифрован преди да напусне машината. Какво още е различно: (1) OpenClaw има вградена команда openclaw backup — тя снема състоянието безопасно и проверява архива; ръчният tar върху живите SQLite файлове рискува повредено копие. (2) ~/.npm-global не е състояние — това са инсталирани програми, които се връщат с инсталатор; махнато е. (3) Конкретното облачно хранилище е заменено с отдалечено хранилище по избор, и то само с шифровани файлове. (4) „Ротацията“ с rclone delete --min-age 7d трие по възраст, не пази „последните 7“ — ако копията спрат за осем дни, изтрива всичко. Сега се пази броят копия. (5) Възстановяването с cp -r върху живото състояние е заменено със openclaw backup restore в нова папка и ръчно включване. (6) В WSL2 графикът е systemd таймер (cron остава като вариант), а командата за rclone през curl | sudo bash е махната. (7) Махнати са личните потребителски имена и пътища от примерите.
openclaw, това: скрипта, шифроването и разшифроването с age, ротацията по брой, правата на файловете и веригата restic (init, backup, forget, check, restore). Не са изпитани на живо: самият openclaw backup, системният таймер в WSL2 и командата на Windows за график.01Какво ще научиш
- Къде OpenClaw всъщност държи състоянието си и кое от него си струва да се копира.
- Защо копието на живите файлове е опасно и как вградената команда го решава.
- Как да шифроваш копията така, че машината да може да ги прави, но не и да ги чете.
- Как да пуснеш нощно копие със systemd таймер (и с cron или планировчика на Windows).
- Как да пазиш копията по ясно правило — колко, къде и докога.
- Как да репетираш възстановяването, без да пипаш живата инсталация.
02Преди да започнеш
- Минал си Обучение 3: OpenClaw 🔒 локално е инсталиран, а
openclaw gateway statusпоказва работещ Gateway. - Ubuntu на WSL2 (или друг Linux). За график със systemd — включен systemd в WSL (стъпка 6).
- Командата
openclaw backupе в издание 2026.9.7 (последното към 01.10.2026, изисква Node.js 24.16+ или 26.1+). Провери при себе си:openclaw backup --help. ⚠️ От кое издание насам командата съществува, не сме установили — ако липсва, обнови OpenClaw. - Инструментът age за шифроване:
sudo apt install age⚠️ (пакетът е в хранилищата на Ubuntu; ако не се намира, свали изданието от страницата на проекта). - Мениджър на пароли (или друго място извън тази машина), където ще пазиш ключа за разшифроване. Без него копията са безполезни.
- Свободно място: архивът е колкото състоянието плюс работното пространство. Виж размера със стъпка 2.
*.sqlite, -wal, -shm или -journal файлове от работещ Gateway — копието може да е скъсано. (3) Не държим ключа за разшифроване до копията: който открадне папката, би открил и ключа.03Стъпки
-
Къде живее състоянието на OpenClaw
Според официалната документация OpenClaw пази същественото в SQLite: една обща база и по една база на всеки агент. Настройките са във файл
openclaw.json. Защо е важно? Защото старият ни урок копираше „папка“, а истинското състояние са бази, които се пишат, докато Gateway работи.Какво Къде (по подразбиране) В архива? Състояние и бази (обща + по агент) ~/.openclaw(сменя се сOPENCLAW_STATE_DIR)да — като безопасна онлайн снимка Настройки ~/.openclaw/openclaw.json(сменя се сOPENCLAW_CONFIG_PATH)да, заедно с включените $includeфайловеДостъпи и профили за вход в състоянието (папка credentials/и базите)да — най-чувствителното Работно пространство на агента обикновено ~/.openclaw/workspaceда; пропуска се с --no-include-workspaceИнсталирани програми ( ~/.npm-global,node_modulesна разширенията)— не — преинсталират се Ако в
openclaw.jsonима тайни, OpenClaw запазва в копието написаното от теб (вкл. заместители като${ПРОМЕНЛИВА}), не „разрешените“ стойности — но другите файлове в архива пак могат да са чувствителни. -
Пробен пуск на вградената команда
Първо виж какво би влязло, без да пишеш нищо:
bash · в Ubuntu (WSL2)openclaw backup create --dry-run --jsonОтговорът изброява източниците (състояние, настройки, агенти, работно пространство) и какво се пропуска. После направи истински архив в частна папка — извън
~/.openclawи извън работното пространство, иначе OpenClaw отказва (за да не копира себе си):bashmkdir -p ~/openclaw-backups-test && chmod 700 ~/openclaw-backups-test openclaw backup create --output ~/openclaw-backups-test --verify ls -lh ~/openclaw-backups-test--verifyпроверява архива веднага след записа. Файлът е с име от видаДАТА-openclaw-backup.tar.gz, а вече съществуващ файл никога не се презаписва. Това е вече нешифрован архив с тайни — след проверката го изтрий (rm -r ~/openclaw-backups-test), за да не стои.💡По-малък или по-бърз архив--no-include-workspaceпропуска работното пространство (агентите и базите остават);--only-configзаписва само файла с настройки — и то без включените$includeфайлове, затова не е пълно възстановяване. Най-полезен е, когато настройките са повредени и първо искаш да ги запазиш. -
Ключ за шифроване с age
Идеята: на машината стои само публичният ключ — с него се шифрова, но не се чете. Частният ключ (идентичност) стои другаде. Така, дори ако някой вземе копията и машината, не разчита архивите без частния ключ.
bashmkdir -p ~/.config/openclaw-backup && chmod 700 ~/.config/openclaw-backup age-keygen -o ~/.config/openclaw-backup/identity.txt age-keygen -y ~/.config/openclaw-backup/identity.txt > ~/.config/openclaw-backup/recipients.txt cat ~/.config/openclaw-backup/recipients.txtПървата команда създава двойката и печата публичния ключ (започва с
age1…). Втората го записва във файл за получатели. Сега:- Препиши съдържанието на
identity.txtв мениджъра на пароли. - После премахни файла от тази машина (или го премести на външен носител). Трябва ти само при възстановяване.
- Файлът
recipients.txtостава на машината — той е безопасен.
✅Без частния ключ няма връщанеage не може да „възстанови“ загубен ключ. Провери, че в мениджъра на пароли има записано копие, преди да го махнеш от машината. - Препиши съдържанието на
-
Скриптът за копие
Един малък скрипт прави всичко: архив → шифроване → ротация. Поставяме го в
~/bin. Най-важното в него:umask 077(файловете са само за теб), временна папка със сигурни права, шифроване преди файлът да отиде където и да е, и запис с окончателно име едва накрая (недовършено копие не прилича на готово).bash · ~/bin/backup_openclaw.sh#!/usr/bin/env bash # backup_openclaw.sh: encrypted OpenClaw backup with retention set -euo pipefail umask 077 RECIPIENTS="${RECIPIENTS:-$HOME/.config/openclaw-backup/recipients.txt}" # age PUBLIC key DEST_DIR="${DEST_DIR:-$HOME/openclaw-backups}" KEEP="${KEEP:-14}" # how many encrypted archives to keep [ -r "$RECIPIENTS" ] || { echo "missing recipients file: $RECIPIENTS" >&2; exit 1; } mkdir -p "$DEST_DIR" chmod 700 "$DEST_DIR" STAGE="$(mktemp -d)" # private temp dir, outside the OpenClaw state trap 'rm -rf "$STAGE"' EXIT # 1. official archive: state + config + credentials + agents, verified after writing openclaw backup create --output "$STAGE" --verify ARCHIVE="$(find "$STAGE" -maxdepth 1 -type f -name '*.tar.gz' | head -n 1)" [ -n "$ARCHIVE" ] || { echo "no archive produced" >&2; exit 1; } # 2. encrypt BEFORE the file goes anywhere else OUT="$DEST_DIR/$(basename "$ARCHIVE").age" age -R "$RECIPIENTS" -o "$OUT.partial" "$ARCHIVE" mv "$OUT.partial" "$OUT" # 3. retention: keep the newest $KEEP encrypted archives ls -1t "$DEST_DIR"/*.tar.gz.age 2>/dev/null | tail -n +"$((KEEP + 1))" | xargs -r rm -- echo "ok: $OUT"bashmkdir -p ~/bin # после запиши скрипта в ~/bin/backup_openclaw.sh chmod 700 ~/bin/backup_openclaw.sh ~/bin/backup_openclaw.shАко всичко е наред, виждаш
ok: …/…-openclaw-backup.tar.gz.age. Провери трите неща, които ни интересуват:bash · проверкаls -l ~/openclaw-backups # файлове с права -rw-------, само *.age ls -d /tmp/tmp.* 2>/dev/null # не трябва да е останала временна папка # пробно разшифроване (ползва частния ключ — донеси го за момент): age -d -i /път/до/identity.txt ~/openclaw-backups/<файл>.age | tar -tz | head⚠️Временният архив е нешифрован — докато трае скриптътМежду стъпка 1 и 2 архивът е нешифрован във временната папка (права 700, изтрива се при излизане, дори при грешка). Това е приемливо на машина, на която вярваш; ако не — сложиTMPDIRна папка върху шифрован диск. -
Ротация: колко копия пазим
Правилото е в последния ред на скрипта и е по брой: пази се най-новите
KEEPшифровани архива (по подразбиране 14 — две седмици ежедневни копия). Защо не „трий всичко по-старо от N дни“? Защото ако копията тихо спрат (счупен график, пълен диск), след N дни ще изтриеш и последните работещи. Проба — с малко число:bashfor i in 1 2 3 4 5; do KEEP=3 ~/bin/backup_openclaw.sh; done ls ~/openclaw-backups | wc -l # трябва да покаже 3След проверката (с пробните копия) изтрий излишните на ръка — те са твои, не на скрипта.
Къде Правило (предложение) Как На машината последните 14 шифровани архива скриптът ( KEEP=14)Извън машината (по избор) колкото ти е нужно за „връщане назад“, напр. 30 дни или 7 дневни + 4 седмични + 6 месечни правило на хранилището или restic forget(по-долу)Проба за възстановяване веднъж месечно стъпка 8 Сигурността е част от срока. Старо копие съдържа старите достъпи. Когато смениш ключ на канал или доставчик, или заподозреш изтичане, сменяш достъпите и унищожаваш копията, които ги съдържат. Числата в таблицата са предложение — реши ти колко назад искаш да можеш да се върнеш.
-
График: systemd таймер (и варианти)
Вариант А — systemd (препоръчан). В WSL2 systemd не е винаги включен. Провери в Ubuntu:
systemctl --user status. Ако не работи, добави във файла/etc/wsl.conf:ini · /etc/wsl.conf (с sudo)[boot] systemd=trueПосле от PowerShell на Windows изпълни
wsl --shutdownи отвори Ubuntu отново. След това две малки единици — услуга (какво се пуска) и таймер (кога):bash · създава двата файлаmkdir -p ~/.config/systemd/user cat > ~/.config/systemd/user/openclaw-backup.service <<'EOF' [Unit] Description=Encrypted OpenClaw backup [Service] Type=oneshot Environment=PATH=%h/.npm-global/bin:/usr/local/bin:/usr/bin:/bin ExecStart=%h/bin/backup_openclaw.sh EOF cat > ~/.config/systemd/user/openclaw-backup.timer <<'EOF' [Unit] Description=Nightly encrypted OpenClaw backup [Timer] OnCalendar=*-*-* 02:30:00 Persistent=true RandomizedDelaySec=10min [Install] WantedBy=timers.target EOF systemctl --user daemon-reload systemctl --user enable --now openclaw-backup.timer systemctl --user list-timersPersistent=trueзначи: ако машината е била изключена в 02:30, копието се прави при следващото включване. Редът сEnvironment=PATH=…е нужен, защото услугите на systemd не наследяват пътищата на твоя терминал — сложи там папката, където еopenclaw(провери сcommand -v openclaw). Резултатите гледаш сjournalctl --user -u openclaw-backup.service. За да работят потребителските таймери и без отворена сесия, може да е нужноloginctl enable-linger "$USER"⚠️ (не сме го проверявали специално за WSL).⚠️WSL2 спи, когато никой не го ползваТаймерът работи само докато Ubuntu е пуснат.Persistent=trueнаваксва при следващото стартиране, но ако искаш копие „в 02:30 на всяка цена“, използвай вариант В.Вариант Б — cron. Редактирай с
crontab -e(а в WSL2 cron трябва да е пуснат:sudo service cron start):cronPATH=/home/<user>/.npm-global/bin:/usr/local/bin:/usr/bin:/bin 30 2 * * * /home/<user>/bin/backup_openclaw.sh >> /home/<user>/openclaw-backups/backup.log 2>&1Провери с
crontab -l, а след първия пуск — сtail -n 20 ~/openclaw-backups/backup.log.Вариант В — Планировчик на Windows, който буди Ubuntu и пуска скрипта (
wsl -l -vпоказва името на дистрибуцията):PowerShellschtasks /Create /SC DAILY /ST 02:30 /TN "OpenClaw-Backup" /TR "wsl.exe -d Ubuntu-24.04 -- /home/<user>/bin/backup_openclaw.sh"⚠️ Кавичките и пътят през
schtasksне са проверени на живо — прегледай задачата в „Task Scheduler“ и я пусни веднъж на ръка.🧩Вграденият график на OpenClaw — друго нещоopenclaw backup enable --repository <папка> --every 24hпуска график, притежаван от Gateway, но той записва само базите данни в git хранилище (дамп по таблици), не целия архив с настройки и работни пространства. С--pushпо подразбиране пропуска таблиците с достъпи, а за да тръгне, хранилището първо трябва да има отдалеченorigin(openclaw backup git init --repository <папка> --remote <адрес>). Спира се сopenclaw backup disable. Полезен допълнителен слой, не замяна на този урок. След времеopenclaw statusпоказва ред „Backups“, аopenclaw doctorпредупреждава, ако няма успешно копие от над 14 дни ⚠️ (това не го потвърдихме при повторната проверка на документацията). -
Копие извън машината (по избор)
Копие само на същия диск не пази от повреда или кражба. Тъй като вече всичко е шифровано, можеш спокойно да го пратиш на отдалечено хранилище 🌐 извън машината (S3-съвместимо, WebDAV и други, които
rcloneподдържа). Настройката на самото хранилище е отделна работа:rclone config→n) New remote→ име (напр.remote) → тип (напр.webdavилиs3) → адрес и данни за вход; пробата еrclone mkdir remote:openclaw-backupsиrclone lsd remote:. Подробностите за всеки тип са в документацията наrclone. Инсталирай го от пакетите на Ubuntu (sudo apt install rclone) или по официалните указания, не сcurl … | sudo bashна сляпо. Качваме само шифрованите файлове:bashrclone copy ~/openclaw-backups remote:openclaw-backups --include "*.tar.gz.age"remote:е името на хранилището, което си задал сrclone config.rclone copyне трие нищо на отсрещната страна — срокът там се урежда от правилата на хранилището.Вариант с restic.
resticе самостоятелна програма за копия, която шифрова и сама. Ако предпочиташ нея пред age, в скрипта замени частите „шифроване“ и „ротация“ (коментари 2 и 3) с долните команди. Паролата на хранилището е във файл с права 600 (chmod 600), не в самата команда:bash · resticexport RESTIC_REPOSITORY=/път/до/хранилище-или-remote export RESTIC_PASSWORD_FILE=~/.config/openclaw-backup/restic-pass.txt restic init restic backup "$STAGE" --tag openclaw # вместо age: $STAGE е папката на архива restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune restic check restic restore latest --target ~/restore-work/resticЧестно за ползата: всеки архив е ново компресирано цяло, затова restic спестява малко място тук (документацията на OpenClaw също отбелязва, че подобни инструменти пак четат пълните копия). Предимството му е вграденото правило за срок (
forget) и проверката (check). -
Възстановяване — и репетиция
Възстановяването е нарочно „бавно и явно“: OpenClaw никога не пише върху живото състояние. Извлича копието в нова празна папка, а включването е отделна ръчна стъпка. Направи го веднъж сега, докато всичко работи — така знаеш, че ключът и копията са годни.
bash · 1. разшифрова и провериmkdir -p ~/restore-work && chmod 700 ~/restore-work ls -1t ~/openclaw-backups/*.age | head -n 3 age -d -i /път/до/identity.txt -o ~/restore-work/openclaw-backup.tar.gz ~/openclaw-backups/<файл>.age openclaw backup verify ~/restore-work/openclaw-backup.tar.gzbash · 2. извлечи в НОВА папка (репетицията свършва тук)openclaw backup restore ~/restore-work/openclaw-backup.tar.gz --target ~/restore-work/staging find ~/restore-work/staging -type d -name .openclawЦелта не трябва да съществува (или да е празна) и не може да е вътре в живото състояние. Вътре ще видиш
manifest.jsonи папкаpayload/— манифестът е източникът на истината за това какво къде е било. Ако това е репетиция, спри тук, прегледай и изтрий~/restore-work.За истинско възстановяване: спри Gateway, махни настрана текущото състояние (или първо го архивирай), постави извлечената папка на мястото му и провери.
bash · 3. включване (само при истинска нужда)openclaw gateway stop mv ~/.openclaw ~/.openclaw.before-restore mv "<пътят от find>" ~/.openclaw openclaw doctor openclaw gateway start openclaw healthВ скрипт или неинтерактивна обвивка
openclaw gateway stopиска--force. Ако изнесеш състоянието другаде, вместоmvнасочиOPENCLAW_STATE_DIRкъм него. ⚠️ Пътятpayload/posix/…и стъпките по-горе са по документацията, не са пробвани върху истински архив.⛔Възстановяването е „пътуване във времето“Достъпи до чат канали със съхранявано състояние (най-вече WhatsApp) може да се разсинхронизират и да искат повторно свързване. Изчакващи одобрения и състояние на доставките също се връщат назад — прегледай ги, преди да пуснеш Gateway отново. Програмите на разширенията не са в архива: след възстановяване пусниopenclaw plugins update <id>(или преинсталирай) иopenclaw skills list, за да се изградят наново.Пренасяне на друга машина. Същият архив служи и за преместване на асистента на нов компютър: на новата машина инсталираш OpenClaw, минаваш стъпките „разшифрова → verify → restore → включване“ и пускаш
openclaw doctor. Официалното ръководство „Migrating between machines“ описва подробностите. Копието е моментна снимка за пренасяне, не постоянна синхронизация между две работещи машини.
04Проверка
openclaw backup --helpработи, а пробният пуск (--dry-run) изброява очакваните източници.- Има двойка ключове: публичният е на машината, частният е в мениджъра на пароли и не стои до копията.
- Скриптът се изпълнява на ръка и печата
ok: …; в папката има само*.ageфайлове, права-rw-------, а папката е с 700. - Няма останал нешифрован архив (нито в
~/openclaw-backups-test, нито във временна папка). - Графикът е активен (
systemctl --user list-timersпоказваopenclaw-backup.timer) или е настроен cron / задача в Windows. - Ротацията по брой е проверена: след повече пускания от
KEEPостават точноKEEPфайла. - Ако копираш навън — там отиват само
*.tar.gz.age. - Направена е репетиция на възстановяването в нова папка — разшифроване,
openclaw backup verifyиopenclaw backup restoreминават без грешка. - Записан е срокът (колко копия, докога) и кой ще сменя достъпите, ако копие изтече.
05Какво следва
06Източници
- OpenClaw: командата
openclaw backup— архиви, SQLite снимки, git история, график, какво влиза в копието. - OpenClaw: ръководство за копия — избор на път, презапис само във нова папка, „пътуване във времето“, копие извън машината.
- OpenClaw: настройки —
~/.openclaw/openclaw.json,OPENCLAW_CONFIG_PATH. - OpenClaw: управление на услугата на Gateway —
gateway stop,start,restart. - age 🔒 локално — прост инструмент за шифроване на файлове; ключове, получатели,
-R,-d -i. - restic 🔒 локално — копия със сам шифроване;
backup,forget --prune,check,restore. - Microsoft: настройки на WSL —
/etc/wsl.confиsystemd=true. - systemd.timer —
OnCalendar,Persistent.