32个版本

0.5.1 2024年3月17日
0.5.0 2023年1月19日
0.4.1 2023年1月11日
0.3.5 2022年8月18日
0.1.2 2020年11月9日

#25身份验证

每月35次下载

GPL-3.0 许可证

590KB
13K SLoC

Build status on GitLab CI Newest release on crates.io Project license

prs

使用GPG和git同步的,安全、快速且便捷的密码管理器CLI。

prs 是一个终端密码管理器,安全、快速且便捷。它使用 GPG 来安全存储您的秘密,并集成了 git 以实现多台机器之间的自动同步。它还包含内置密码生成器、接收者管理、历史记录跟踪、回滚、维护工具、Tomb支持等功能。

prs usage demo
这里没有可见的演示?在 asciinema 上查看。

prs 受到 pass 的启发,并使用相同的文件结构(增加了某些功能)。因此,prs 可以与 pass 以及其他所有兼容客户端、扩展和迁移脚本一起使用。

功能

  • 功能齐全、快速且友好的命令行工具
  • 临时将秘密复制到剪贴板
  • 使用经过实战检验的 GPG 保护您的秘密
  • 自动与 git 同步,包括历史记录跟踪
  • 支持多台机器,具有简单的接收者管理
  • 使用您默认的编辑器轻松编辑秘密
  • 支持智能别名,属性选择
  • pass 兼容*
  • 支持 Linux、macOS、Windows、FreeBSD 等操作系统,支持 X11 和 Wayland
  • 支持多种加密后端(未来将支持更多后端和加密)
  • 无缝支持 Tomb,以防止元数据泄露*
  • 支持TOTP令牌进行双因素认证
  • 支持使用 -y-f-I 标志进行脚本化
  • 精确且有用的错误报告

prs 包含一些非常棒的调整和优化

  • 通过 git 重用连接,极大地提高了同步速度*
  • 通过 skim 实现超级快速的交互式密钥/收件人选择
  • 防止修改您的剪贴板,没有意外的覆盖或剪贴板丢失
  • 使用 Tomb 时,它会自动为您打开、关闭和调整大小
  • 命令有简短的传统别名,以便更快、更方便地使用
  • 采用安全最佳实践(秘密:归零、mlockmadvice、无格式、

用法

# Show useful commands (based on current password store state)
prs

# Easily add, modify and remove secrets with your default editor:
prs add site/gitlab.com
prs edit site/gitlab.com
prs duplicate my/secret extra/secret
prs alias my/secret extra/alias
prs move my/secret extra/secret
prs remove site/gitlab.com

# Or generate a new secure password
prs generate site/gitlab.com

# Temporary show or copy secrets to clipboard:
prs show
prs show site/gitlab.com
prs copy
prs copy site/gitlab.com

# Manually synchronize password store with remote repository or do some housekeeping
prs sync
prs housekeeping
prs housekeeping run
prs housekeeping recrypt

# Manage recipients when using multiple machines
prs recipients add
prs recipients list
prs recipients remove
prs recipients generate
prs recipients export

# Commands support shorter/conventional commands and aliases
prs a secret  # add
prs c         # copy
prs s         # show
prs rm        # remove
prs yeet      # remove

# List all commands and help
prs help

需求

  • 支持 Linux、macOS、FreeBSD、Windows(其他 BSD 可能也可以工作)
  • 终端 😎
  • 并且
  • 运行:gitgnupggpgme
    • Ubuntu、Debian 及其衍生版本:apt install git gpg libgpgme11 tomb
    • CentOS/Red Hat/openSUSE/Fedora:yum install git gnupg gpgme
    • Arch:pacman -S git gnupg gpgme tomb
    • Alpine:apk add git gnupg gpgme
    • macOS:brew install gnupg gpgme
    • Windows:scoop install git gpg fzf
  • 构建:gitgnupggpgme 开发包和开发工具
    • Ubuntu、Debian 及其衍生版本:apt install git gpg build-essential pkg-config python3 xorg-dev libx11-xcb-dev libdbus-1-dev libgpgme-dev tomb
    • CentOS/Red Hat/openSUSE/Fedora:yum install git gnupg gpgme-devel pkgconfig python3 xorg-x11-devel libxcb-devel
    • Arch:pacman -S git gnupg gpgme pkgconf python3 xorg-server libxcb tomb
    • Alpine:apk add git gnupg gpgme-dev pkgconfig
    • macOS:brew install gnupg gpgme
    • Windows:scoop install git gpg fzf

特定

以下列出的特定功能或软件包需要特定的依赖项。

列出的依赖项可能是不正确或不完整的。如果您认为存在错误,请随时贡献。

[必需] 最小要求
  • 运行和构建:gpggit
    • Ubuntu、Debian 及其衍生版本:apt install git gpg
    • CentOS/Red Hat/openSUSE/Fedora:yum install git gnupg
    • Arch:pacman -S git gnupg
    • Alpine:apk add git gnupg
    • macOS:brew install gpg
    • Windows:scoop install git gpg fzf
[推荐] 功能:GPGME 后端

--feature=backend-gpgme

  • 运行:gpgme 和构建工具
    • Ubuntu、Debian 及其衍生版本:apt install libgpgme11
    • CentOS/Red Hat/openSUSE/Fedora:yum install gpgme
    • Arch:pacman -S gpgme
    • 阿尔卑斯:apk add gpgme
    • macOS:brew install gpgme
    • Windows:不支持
  • 构建:_gpgme 开发包
    • Ubuntu、Debian及其衍生版:apt install build-essential pkg-config libgpgme-dev
    • CentOS/Red Hat/openSUSE/Fedora:yum install pkgconfig gpgme-devel
    • Arch:pacman -S pkgconf gpgme
    • 阿尔卑斯:apk add pkgconfig gpgme-dev
    • macOS:brew install gpgme
    • Windows:不支持
【推荐】功能:剪贴板

--feature=clipboard

  • 运行
    • Ubuntu、Debian及其衍生版:apt install xorg libx11-xcb-dev wl-clipboard
    • CentOS/Red Hat/openSUSE/Fedora:yum install pkgconfig xorg libxcb wl-clipboard
    • Arch:pacman -S pkgconf xorg-server python3 libxcb wl-clipboard
    • 阿尔卑斯:?
    • macOS:
    • Windows:
  • 构建
    • Ubuntu、Debian及其衍生版:apt install build-essential pkg-config python3 xorg-dev libx11-xcb-dev
    • CentOS/Red Hat/openSUSE/Fedora:yum install pkgconfig python3 xorg-x11-devel libxcb-devel
    • Arch:pacman -S pkgconf xorg-server python3 libxcb
    • 阿尔卑斯:?
    • macOS:
    • Windows:

注意:xorglibx11-xcb仅在运行X11时需要。 wl-clipboard仅在运行Wayland时需要。

【推荐】功能:通知

--feature=notify

  • 运行
    • Ubuntu、Debian及其衍生版:某种支持libnotify通知的软件
    • CentOS/Red Hat/openSUSE/Fedora:某种支持libnotify通知的软件
    • Arch:某种支持libnotify通知的软件
    • 阿尔卑斯:某种支持libnotify通知的软件
    • macOS:
    • Windows:
  • 构建:gpgme 开发包
    • Ubuntu、Debian及其衍生版:apt install libdbus-1-dev
    • CentOS/Red Hat/openSUSE/Fedora:yum install dbus-libs
    • Arch:pacman -S dbus
    • 阿尔卑斯:apk add dbus
    • macOS:
    • Windows:
功能:墓碑

--feature=tomb

  • 运行:tomb
    • Ubuntu、Debian及其衍生版:apt install tomb
    • CentOS/Red Hat/openSUSE/Fedora:安装
    • Arch:pacman -S tomb
    • 阿尔卑斯:安装
    • macOS:不支持
    • Windows:不支持
客户端:GTK3客户端

crate:prs-gtk3 @ ./gtk3

  • 运行:gtk3
    • Ubuntu, Debian及其衍生版:apt install libgtk-3-0 libgl1-mesa0
    • CentOS/Red Hat/openSUSE/Fedora:yum install gtk3
    • Arch:pacman -S gtk3
    • Alpine:apk add gtk+3.0 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main
    • macOS:brew install gtk+3
    • Windows:不支持
  • 构建:gtk3 开发包
    • Ubuntu, Debian及其衍生版:apt install libgtk-3-dev libgl1-mesa-dev
    • CentOS/Red Hat/openSUSE/Fedora:yum install gtk3-devel
    • Arch:pacman -S gtk3
    • Alpine:apk add gtk+3.0-dev --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main
    • macOS:brew install gtk+3
    • Windows:不支持

安装

由于prs还处于早期阶段,目前只有有限的安装选项。欢迎贡献。

确保您满足并安装了“运行”要求

请参阅以下特定于操作系统/发行版的说明

Linux(所有发行版)

目前只有有限的安装选项。请参阅以下列表。或者,您可以使用预构建的二进制文件手动安装。

只提供64位(x86_64)的包和二进制文件。对于其他架构和配置,您可能需要从源代码编译

将很快提供更多包选项。

Linux:Arch AUR包

» prs(从源代码编译,最新发布版本)
» prs-git(从源代码编译,最新master提交)

yay -S prs
# or
aurto add prs
sudo pacman -S prs
# or using any other AUR helper

prs --help

Linux:预构建的二进制文件

查看Linux二进制文件的最新发布资源
使用prs-v*-linux-x64-static二进制文件,以最小化出现问题的可能性。如果尚不可用,您可以使用旧版本的工件,直到可用为止。

在继续之前,请确保您满足并安装了要求

您必须使二进制文件可执行,并可能希望将其移动到/usr/local/bin以方便执行

# Rename binary to prs
mv ./prs-* ./prs

# Mark binary as executable
chmod a+x ./prs

# Move binary into path, to make it easily usable
sudo mv ./prs /usr/local/bin/

prs

macOS

prs可以使用homebrew安装。
或者,您可以从源代码编译

确保您已安装homebrew,然后运行

brew install prs
prs

注意:此软件包不会在发布时自动更新,请随时在此贡献。

Windows

建议使用scoop软件包
或者您也可以使用预构建的二进制文件手动安装。

如果您正在使用Windows Subsystem for Linux,强烈建议您安装预构建的Linux二进制文件

只提供64位(x86_64)的二进制文件。对于其他架构和配置,您可能需要从源代码编译

Windows: scoop软件包

请确保您已安装scoop,然后运行

scoop install prs
prs

Windows: 预构建的二进制文件

请检查最新发布版本的Windows二进制文件资源。使用prs-v*-windows二进制文件。如果它尚未提供,您可以使用之前的版本的工件,直到它可用。

您可以在同一目录下使用prs从命令行访问

.\prs.exe

要使它作为prs全局可调用,您必须将二进制文件放在您系统的PATH中。

其他

在最新发布页面找到最新二进制文件

注意:对于Linux,如果它适用,推荐使用GNU(不是musl)的二进制文件,因为它有更好的剪贴板/通知支持。

# download binary from any source above

# make executable
chmod a+x ./prs

# optional: make globally executable
mv ./prs /usr/local/bin/prs

./prs --help

构建

要自己构建和安装prs,您需要以下内容

  • Rust 1.65或更高版本(MSRV)
  • 构建要求

并非所有功能都在macOS或Windows上受支持。默认配置应该可以工作。当更改编译时功能时,请确保检查兼容性。请参阅编译器功能

编译和安装

要使用默认功能编译和安装prs,请按照以下步骤操作

  • 直接从cargo编译和安装

    # Compile and install from cargo
    cargo install prs-cli -f
    
    # Start using prs
    prs --help
    
  • 或者克隆存储库,并使用cargo安装

    # Clone the project
    git clone https://github.com/timvisee/prs.git
    cd prs
    
    # Compile and install
    cargo install --path cli -f
    
    # Start using prs
    prs --help
    
    # or run it directly from cargo
    cargo run --release --package prs-cli -- --help
    
    # or invoke release binary directly
    ./target/release/prs --help
    

编译功能/使用标志

prs提供不同的使用标志,以切换是否包含各种功能和加密后端。以下功能可用,其中一些默认启用

功能 启用 描述
alias prc-cli 默认 支持秘密别名(在Windows上部分支持)
clipboard prs-cli 默认 剪贴板支持:将秘密复制到剪贴板
notify prs-cliprs-gtk3 默认 通知支持:在剪贴板清除时通知
tomb all 默认 密码存储的Tomb支持(仅在Linux上支持)
totp prs-cli 默认 2FA的TOTP令牌支持
backend-gpgme all 使用GPGME的GPG加密后端(在Windows上不受支持)
backend-gnupg-bin all 默认 使用GnuPG二进制的GPG加密后端
select-skim prc-cli 默认 与skim交互式选择(在Windows上忽略)
select-skim-bin prs-cli 通过外部skim二进制文件进行交互式选择
select-fzf-bin prs-cli 默认 通过外部fzf二进制文件进行交互式选择

要启用构建或安装期间的功能,请使用--features <features...>指定它们,当使用cargo时。您可能希望首先使用--no-default-features禁用默认功能。以下是一些示例

# Default set of features with backend-gnupg-bin, install or build, one of
cargo install --path cli --features backend-gnupg-bin
cargo build --path cli --release --features backend-gnupg-bin

# No default features, except required, one of
cargo install --path cli --no-default-features --features backend-gpgme
cargo install --path cli --no-default-features --features backend-gnupg-bin

# With alias, clipboard and notification support, one of
cargo install --path cli --no-default-features --features backend-gpgme,alias,clipboard,notify
cargo install --path cli --no-default-features --features backend-gnupg-bin,alias,clipboard,notify

安全性

安全性由全球范围内使用并经过20多年实战考验的gpg提供支持,详情请访问gpg官方网站

总结来说,在假设以下条件的情况下,prs是安全的,以保护您的最深层次秘密:

  • 您将密码存储目录(~/.password-store)保持安全
  • 使用与git同步时:您确保远程仓库安全
  • 您使用安全的GPG密钥
  • 您的机器是安全的

秘密内容经过加密并得到保护。秘密以加密的GPG文件形式存储。然而,某些元数据在未解密的情况下是可见的。当您有权访问密码存储目录时,秘密的名称(文件名)、修改时间(文件修改时间)和加密大小(文件大小)是可见的。为了防止此类元数据泄露,您可以使用Tomb

prs使用了安全最佳实践来防止意外泄露任何秘密数据。在此处,敏感数据如明文、密文等被称为“秘密”。

秘密是/使用

  • 在删除时清零
  • 锁定到物理内存,无法泄露到交换/磁盘(mlock
  • 锁定在内存中,无法被转储/不包含在核心中(madvice
  • 不写入磁盘以编辑(如果可能的话)
  • 阻止字符串格式化
  • 常量时间比较,以防止基于时间的攻击
  • 最小化克隆

防止泄露秘密的保护有其局限性,特别是

  • prs show将秘密数据打印到stdout
  • prs edit可能会在磁盘上存储秘密到一个安全的临时文件(如果安全位置如/dev/shm不可用),然后打开它并使用默认编辑器编辑,之后删除它
  • prs copy将秘密数据复制到您的剪贴板,并在20秒后清除

Security
参考:XKCD 538

注意:prs在泄露秘密或其他问题造成的任何形式的损害方面不提供任何形式的保证。

常见问题解答

prs是否安全?prs有多安全?

请阅读安全部分。

我该如何使用git进行同步?

如果您已经有一个与prs兼容的远程密码存储仓库,请使用以下命令克隆它:

# Clone existing remote password store, automatically enables sync
prs clone MY_GIT_URL

# List secrets
prs list

如果您还没有远程密码存储仓库,可以创建一个(例如在GitHub或GitLab上创建一个空的私有仓库),然后运行以下命令:

# Initialize new password store (if you haven't done so yet)
prs init

# Initialize sync functionality (if you haven't done so yet)
prs sync init

# Set your remote repository URL and sync to push your password store
prs sync remote MY_GIT_URL
prs sync

当您的密码存储启用了同步功能时,所有修改您的秘密的命令将自动保持您的远程存储同步。

如果您在另一台机器上编辑了秘密,需要手动触发同步,请运行以下命令:

prs sync

我如何在多台机器上使用prs并在它们之间同步?

注意:在新的/附加机器上添加和使用现有的密码存储需要您在设置期间能够访问已使用存储的机器。

首先,您必须在某台机器上有一个密码存储。如果您还没有,请使用prs init创建一个。您必须为此密码存储设置与远程git仓库的同步,请参阅如何使用git进行同步部分。

要在新机器上使用您现有的密码存储库,请安装prs并克隆您的远程密码存储库。

# On new machine: clone existing password store from git remote
prs clone MY_GIT_URL

然后为您的新的机器添加一个密码存储库的接收者。我强烈建议为每台机器使用一个新的接收者(GPG密钥对)(这样您就不必共享秘密GPG密钥)。使用以下方法将现有的秘密GPG密钥作为接收者添加,或生成一个新的GPG密钥对:

# On new machine: add existing recipient or generate new one
prs recipients add --secret
# or
prs recipients generate

由于这些秘密尚未为新接收者加密,因此您的新的机器目前无法读取任何密码存储库的秘密。回到您已经使用存储库的现有机器上,并重新加密所有秘密,以便也为新接收者加密。

# On existing machine: re-encrypt all secrets
prs housekeeping recrypt --all

这可能需要一些时间。完成后,在新机器上同步,以拉取更新的秘密。

# On new machine: pull in all re-crypted secrets
prs sync

# You're done!
prs list

如何在移动设备上使用prs

prs本身不支持移动设备,但您可以使用兼容的客户端在移动设备上使用密码存储库。

请参阅pass网站上的兼容客户端

如果我丢失了密钥,我能恢复我的秘密吗?

不,如果您丢失了所有密钥,就没有恢复秘密的方法。

您可能会因为机器崩溃或重新安装操作系统而丢失密钥(接收者、GPG秘密密钥)。

如果您在多台机器上使用git同步相同的密码存储库,您仍然可以读取其他机器上的秘密。要重新添加您丢失了密钥的机器,请从该机器上删除密码存储库,并参阅本节

什么是Tomb?

Tomb是一个文件加密系统。它可以与prs一起使用,以防止您的密码存储库的元数据泄露。

在使用Tomb与prs时,您的密码存储库存储在一个加密文件中。prs会根据需要自动为您打开和关闭密码存储库Tomb。这使得恶意程序列出您的密码存储库内容变得更加困难。

这个功能受到了pass-tomb的启发,这是一个为Tomb提供支持的pass扩展。在prs中,此功能是内置的。

注意:Tomb仅在Linux上受支持。

如何使用Tomb?

prs在Linux系统上内置了对Tomb的支持。请确保prs是用tomb 功能编译的,并且Tomb已安装。

要为当前的密码存储库初始化Tomb,只需调用

# Initialize tomb, this may take some time
prs tomb init

# Read tomb status
prs tomb status

要在Tomb中初始化新的密码存储库,首先初始化密码存储库,然后初始化Tomb。

# Initialize new password store
prs init

# ...

# Initialize tomb, this may take some time
prs tomb init

如果您已经使用pass-tomb创建了一个Tomb,则无需采取任何行动。prs对其提供无缝支持,并且它应该自动为您管理它。调用prs tomb status以确认它已被检测到。

如何在多台机器上使用Tomb?

Tomb是本地的,不会同步。要在多台机器上使用Tomb,您必须在每台机器上初始化它。

只需在您尚未使用Tomb的机器上运行prs tomb init,并在新机器上克隆密码存储库后。

prspass兼容吗?

是的。

prs使用与pass相同的文件结构。其他pass客户端应该能够查看和编辑您的秘密。

prs还会添加一些额外的文件和设置,一些prs功能可能无法与其他pass客户端一起使用。

虽然后备文件结构兼容,但命令行界面不兼容,并且与 pass 不同。这是为了消除歧义并提高整体可用性。

在此处查看兼容的 pass 客户端列表 这里

帮助

$ prs help

prs 0.5.1
Tim Visee <3[email protected]>
Secure, fast & convenient password manager CLI with GPG & git sync

Usage: prs [OPTIONS] [COMMAND]

Commands:
  show          Display a secret
  copy          Copy secret to clipboard
  generate      Generate a secure secret
  add           Add a secret
  edit          Edit a secret
  duplicate     Duplicate a secret
  alias         Alias/symlink a secret
  move          Move a secret
  remove        Remove a secret
  list          List all secrets
  grep          Grep all secrets
  init          Initialize new password store
  clone         Clone existing password store
  sync          Sync password store
  slam          Aggressively lock password store & keys preventing access (emergency)
  totp          Manage TOTP tokens
  recipients    Manage store recipients
  git           Invoke git command in password store
  tomb          Manage password store Tomb
  housekeeping  Housekeeping utilities
  help          Print this message or the help of the given subcommand(s)

Options:
  -f, --force         Force the action, ignore warnings
  -I, --no-interact   Not interactive, do not prompt
  -y, --yes           Assume yes for prompts
  -q, --quiet         Produce output suitable for logging and automation
  -v, --verbose...    Enable verbose information and logging
  -s, --store <PATH>  Password store to use [env: PASSWORD_STORE_DIR=]
      --gpg-tty       Instruct GPG to ask passphrase in TTY rather than pinentry
  -h, --help          Print help
  -V, --version       Print version

许可证

本项目采用 GNU GPL-3.0 许可证发布。有关更多信息,请查看 LICENSE 文件。

本项目的库部分采用 GNU LGPL-3.0 许可证。有关更多信息,请查看 lib/LICENSE 文件。

依赖关系

~13–45MB
~721K SLoC