Atuin 多机历史同步完全指南:注册、加密密钥与 `atuin sync` 实战

Atuin 多机历史同步完全指南:注册、加密密钥与 `atuin sync` 实战 Atuin 多机历史同步完全指南注册、加密密钥与atuin sync实战【免费下载链接】atuin✨ Making your shell magical项目地址: https://gitcode.com/gh_mirrors/at/atuin本指南围绕 Atuin 的同步Sync功能展开涵盖从注册同步账号、管理端到端加密密钥到首次同步与多机登录的完整流程。读完你将掌握atuin register、atuin key、atuin login、atuin sync等命令的正确用法理解同步频率、强制全量同步等配置的实际作用并能在自托管服务器场景下完成配置。本文以仓库文档 docs/docs/guide/sync.md 为主体结合客户端命令源码与配置文档进行深度展开。同步解决了什么问题安装 Atuin 后它会把你的 shell 历史存储在本地 SQLite 数据库中并提供检索。但此时历史还只存在于当前这一台机器上——换一台机器历史就断了。同步Sync要解决的就是两件事备份把历史加密后上传到同步服务器本机数据丢失时可恢复多机共享让多台机器拥有同一份 shell 历史在一台机器上执行过的命令在另一台机器上也能搜索到。同步的关键特性是端到端加密end-to-end encryption你的历史在上传前就使用本地生成的加密密钥加密服务器运营方看到的只是密文无法窥探你的数据。这正是Atuin 开发者不会向你索要密钥这一原则的技术基础。同步是可选步骤。如果不做同步历史只保存在本机不做备份、不跨机器共享参见 docs/docs/guide/getting-started.md。前置条件确认安装与同步地址开始之前请确认Atuin 已安装并接入 shell能正常记录和搜索历史。尚未安装可参考 安装指南。确定同步服务器地址。默认使用 Atuin 官方托管的服务器https://api.atuin.sh如果你想使用自托管服务器必须先设置sync_address否则注册和登录都会打到默认服务器上。自托管部署方式见 服务器搭建文档。# ~/.config/atuin/config.toml sync_address https://sync.example.com配置文件位于~/.config/atuin/config.toml可用环境变量ATUIN_CONFIG_DIR覆盖目录位置数据与密钥存放在~/.local/share/atuin。sync_address的默认值定义在源码 crates/atuin-client/src/settings.rs 中。注册同步账号atuin register如果你还没有同步账号先注册atuin register -u YOUR_USERNAME -e YOUR_EMAIL注意-p PASSWORD参数可选。为了不让密码出现在 shell 历史中建议省略密码参数让 Atuin 通过stdin交互式询问。注册成功后Atuin 会自动为你生成一个加密密钥并保存在本地同时完成登录——之后同步就会自动进行。从源码 crates/atuin/src/command/client/account/register.rs 可以看到注册流程的细节若本机已登录Hub 会话或 Legacy 会话命令会提示先atuin logout再注册新账号注册成功后通过paseto_v4::Key::try_load_or_generate(settings.key_path)生成或加载加密密钥注册成功时会打印提醒请记下你的密钥运行atuin key查看其他设备登录时需要它丢失后无法找回。关于用户名的约束用户名必须全局唯一且只能包含字母数字或连字符-。邮箱仅用于重要通知如安全事件、服务变更等不会用于营销。加密密钥备份它永远不要分享加密密钥是整个同步体系中最核心、也最脆弱的资产。注册时生成的密钥默认保存在~/.local/share/atuin/keyLinux 下也可通过配置项key_path修改存储位置。查看密钥atuin key默认输出为BIP39 助记词一组英文单词便于人工抄写与录入如果需要程序化传输可改用 base64 输出atuin key --base64这两种形式在登录时都接受——从源码 crates/atuin-client/src/command/client/account/login.rs 的prompt_and_store_key可以看到输入的密钥会依次尝试按 BIP39 助记词解析密钥本身使用 Paseto v4 算法处理crates/atuin-common/src/encryption/paseto_v4.rs。关于密钥的安全准则请牢记三条永远不要分享密钥。Atuin 开发者绝不会向你索要密钥、密码或 Atuin 数据目录的内容丢失密钥 丢失历史。Atuin 端到端加密的设计决定了服务器不持有密钥副本丢了就彻底无法解密已同步的数据官方也无能为力妥善备份。建议把密钥存放在密码管理器中或者抄写在安全的地方。密钥是可配置的对应配置项key_path ~/.atuin-key首次同步与同步频率注册完成后Atuin 默认每小时自动同步一次默认值为5m见下文配置说明文档 docs/docs/configuration/config.md 中sync_frequency的默认说明与此一致实际默认以配置文档与源码为准。auto_sync默认开启因此在登录状态下会自动同步无需手动干预。手动触发一次同步atuin sync常规同步与强制全量同步Atuin 会尽量做聪明的增量同步避免浪费网络流量。所谓增量是指客户端只与服务器交换新增或变更的记录。如果发现数据缺失比如某台机器上少了些历史条目可以强制做一次全量同步atuin sync -f-f--force会强制重新拉取全部数据处理历史数据时可能耗时更长。从实现上看atuin sync的流程是crates/atuin/src/command/client/sync.rs从key_path加载加密密钥构建并连接一个同步会话SyncSession通过session.keyed(encryption_key).sync()与服务器交换记录返回(uploaded, downloaded)调用crate::sync::build()把下载到的记录增量重建到本地各存储中若本地历史索引数量大于记录存储数量会自动执行一次 store 初始化并再跑一轮同步把新产生的本地记录上传上去。sync::build会重建的不只是历史——从 crates/atuin/src/sync.rs 可以看到它还同步重建了别名alias、变量var、KV、脚本script等存储单个存储失败不会中断其他存储的构建仅打印警告。同步状态如需查看当前同步状态如最近同步时间、待同步数据等可使用atuin sync status该子命令同样定义在 crates/atuin/src/command/client/sync.rs 中。多机登录atuin login只在一台机器登录时同步的作用主要是备份但多机同步才是 Atuin 同步能力的核心——所有机器共享同一份历史。流程分三步在第一台机器上确认已注册并记录密钥运行atuin key记下助记词或 base64在新机器上安装 Atuin登录atuin login -u USERNAMEAtuin 会交互式询问你的密码和加密密钥。同样为避免敏感信息进入 shell 历史也可以省略-p与-k参数改用 stdin 输入atuin login -u USERNAME -p PASSWORD -k KEY登录完成后后台会自动同步但你也可以手动执行atuin sync或发现数据缺失时强制全量同步atuin sync -f登录时的密钥校验从源码 crates/atuin/src/command/client/account/login.rs 可以看出登录并非简单地保存会话还会用密钥向服务器做一次校验session.keyed(key).key_valid()若服务器确认密钥能正确解密数据None才把密钥持久化到本地若返回WrongKey密钥错误交互模式下会提示重新输入正确密钥非交互模式下则会自动退出登录logout_wrong_key避免留下一个登录了但解不开数据的半登录状态其他非密钥类错误如瞬时网络问题不会中断登录因为用户已认证稍后可自行同步。这也是为什么文档反复强调多机登录必须使用同一把密钥——WrongKey的判定来自用你的密钥尝试解密服务器上的加密记录失败参见 crates/atuin-client/src/record/sync/mod.rs 的WrongKey定义与相关测试。同步相关配置详解以下配置项直接决定同步行为均写入~/.config/atuin/config.toml详见 配置文档。sync_address默认https://api.atuin.sh同步服务器地址。自托管时务必修改此值否则仍会连接官方服务器。sync_address https://api.atuin.shsync_frequency默认5m自动同步的频率接受10s、20m、1h、1d这类时长字符串裸数字按秒解析向后兼容。若设为0Atuin 会在每条命令执行后都同步——注意部分服务器可能对高频同步做限流但不会造成功能问题。sync_frequency 5mauto_sync默认true是否在登录状态下自动同步。auto_sync truenetwork_timeout与network_connect_timeoutnetwork_timeout默认30s单次同步网络请求的最大等待时间超时即失败而不是无限等待network_connect_timeout默认5s与同步服务器建立连接的超时时间。两者同样支持时长字符串与裸数字秒。network_timeout 30s network_connect_timeout 5sextra_headers默认{}自托管服务器若位于代理或访问网关之后如 Cloudflare Access可配置额外的 HTTP 头随每个同步请求发送。Atuin 自身会设置的请求头如Authorization优先级更高、不可被覆盖配置了额外请求头时Atuin 会拒绝跟随跨域重定向避免凭据泄漏到其他源站。extra_headers { CF-Access-Client-Id ..., CF-Access-Client-Secret ... }守护进程daemon模式下的同步频率若启用了守护进程[daemon] enabled true其自动同步频率由[daemon] sync_frequency控制默认5m接受30s、5m、1h等时长裸数字按秒解析。[daemon] enabled true sync_frequency 5m账号退出与删除退出登录atuin logout退出登录后本机将停止与该账号的自动同步。删除账号atuin account delete这会删除服务器上的账号及所有已同步历史。注意本地数据不受影响。这是不可逆操作请先确认你真的不需要服务器上的数据。常见问题与排障问为什么一台机器上搜索不到另一台机器执行过的命令先手动执行atuin sync确认同步完成如果仍然缺失运行atuin sync -f强制全量同步处理历史数据可能需要更长时间。问登录新机器时提示密钥错误WrongKey说明该机器上输入的密钥与服务器上已有数据不匹配。在原机器上运行atuin key取得正确密钥后重新atuin login。交互模式下可以重新输入非交互脚本模式会被自动退出登录需重新登录。问密钥丢了怎么办无法找回。端到端加密意味着服务器没有密钥副本已同步的历史将永远无法解密。这也是文档强烈建议把密钥存进密码管理器的重要原因。问不想用官方服务器参考 服务器搭建文档 自建服务器并把sync_address指向自己的地址然后正常执行注册、同步流程即可。自托管的部署形态Docker、systemd、Kubernetes可进一步查看 docs/docs/self-hosting。小结Atuin 的同步以端到端加密为基石通过atuin register生成密钥、atuin sync完成数据交换、atuin login实现多机共享。掌握本指南的核心要点——密钥即数据丢失密钥等于丢失历史——你就能安全地在多台机器之间共享同一份 shell 历史或借助自托管服务器把数据完全掌握在自己手中。【免费下载链接】atuin✨ Making your shell magical项目地址: https://gitcode.com/gh_mirrors/at/atuin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考