32 个版本

0.11.0 2024 年 3 月 17 日
0.10.0 2023 年 9 月 10 日
0.9.6 2023 年 5 月 25 日
0.9.5 2023 年 3 月 30 日
0.7.3 2021 年 7 月 25 日

#125 in 密码学

MITLGPL-2.1

320KB
6.5K SLoC

Logo

GitHub Release Crate Release Coverage Continuous Integration Continuous Deployment Docker Builds Documentation

关于

gpg-tui 是一个 基于文本的用户界面,用于 GnuPG

它旨在通过提供界面和命令行回退(用于更复杂的操作)来简化密钥管理操作,例如列出/导出/签名。它并不是试图成为 所有gpg 提供的功能的完整界面,但它试图为密钥管理带来更交互的方式。

演示

gpg-tui --style colored --splash --homedir /etc/pacman.d/gnupg
目录

需求

  • Rust: >=1.70.0
  • 核心依赖项: gnupggpgme>=1.12.0libgpg-error
  • 其他依赖项: libxcb

请注意,这些依赖项(软件包)的名称可能会根据发行版/平台而变化。(*

为了安装这些依赖项

  • 在 Arch Linux 上,运行 pacman -S gpgme libx11
  • 在 Debian/Ubuntu 上,运行 apt-get install libgpgme-dev libx11-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev
  • 在 Fedora 上,运行 dnf install gpgme-devel libX11-devel
  • 在 Void Linux 上,运行 xbps-install -S gpgme-devel libxcb-devel libgpg-error-devel gnupg

安装

打包状态

Packaging status

Cargo

gpg-tui 可在 crates.io 获取

cargo install gpg-tui

Arch Linux

社区

gpg-tui 可通过 社区仓库 使用 Pacman 安装

pacman -S gpg-tui

AUR

gpg-tui 同样可在 AUR 获取,并可以使用 AUR 助手 安装

paru -S gpg-tui-git

或者,如果您愿意,可以克隆 AUR 软件包 并使用 makepkg 编译

# clone the AUR repository
git clone https://aur.archlinux.org/gpg-tui-git.git && cd gpg-tui-git/

# build the package
makepkg -si

Alpine Linux

gpg-tui 可在 Alpine Edge 获取。在启用 社区仓库 后,可通过 apk 安装。

apk add gpg-tui

Gentoo

dm9pZCAq 中提供

eselect repository enable dm9pZCAq
emerge --sync dm9pZCAq
emerge app-crypt/gpg-tui::dm9pZCAq

Homebrew

要安装 Homebrew 软件包,请运行

brew install gpg-tui

要更新,请运行

brew upgrade gpg-tui

Docker

Docker Hub

查看可用的 标签

docker pull orhunp/gpg-tui:[tag]

您还可以使用以下命令进行快速启动

docker run --rm -it -v "$HOME/.gnupg":/app/.gnupg --user 1000:1000 orhunp/gpg-tui --homedir /app/.gnupg

使用 Dockerfile

# clone the repository
git clone https://github.com/orhun/gpg-tui.git && cd gpg-tui/

# build the image
docker build -t gpg-tui .

# run the container
docker run -it gpg-tui

FreeBSD

所有必需的依赖项都将自动独立于所选安装方法获取和安装。

从源代码构建

# using a port
cd /usr/ports/security/gpg-tui
make install
# alternative method using portmaster
portmaster security/gpg-tui

二进制发布

# update repository catalogue (if outdated)
pkg update

# fetch and install the package
pkg install gpg-tui

NetBSD

gpg-tui 可从主 pkgsrc 分支 获取。

使用包管理器安装

pkgin install gpg-tui

从源代码构建

cd /usr/pkgsrc/security/gpg-tui
make install

手动安装

从源代码构建

# clone the repository
git clone https://github.com/orhun/gpg-tui.git && cd gpg-tui/

# build and install
cargo install --root "$HOME/.cargo" --path .

二进制发布

查看由 持续部署工作流程 自动化的 发布版本

使用方法

gpg-tui [OPTIONS]
Options:
  -a, --armor                 Enables ASCII armored output
      --splash                Shows the splash screen on startup
      --config <path>         Sets the configuration file [env: GPG_TUI_CONFIG=]
      --homedir <dir>         Sets the GnuPG home directory [env: GNUPGHOME=]
  -o, --outdir <dir>          Sets the output directory [env: OUTDIR=]
      --outfile <path>        Sets the template for the output file name [env: OUTFILE=] [default: {type}_{query}.{ext}]
  -d, --default-key <key>     Sets the default key to sign with [env: DEFAULT_KEY=]
  -t, --tick-rate <ms>        Sets the tick rate of the terminal [env: TICK_RATE=] [default: 250]
  -c, --color <color>         Sets the accent color of the terminal [env: COLOR=] [default: gray]
  -s, --style <style>         Sets the style of the terminal [env: STYLE=] [default: colored] [possible values: plain, colored]
  -f, --file-explorer <app>   Sets the utility for file selection [env: FILE_EXPLORER=] [default: xplr]
      --detail-level <level>  Sets the detail level for the keys [env: DETAIL_LEVEL=] [default: minimum] [possible values: minimum, standard, full]
      --log-file <path>       Sets the file to save the logs [env: LOG_FILE=]
      --select <option>       Enables the selection mode [env: SELECT=] [possible values: row1, row2, key, key-id, key-fingerprint, user-id]
  -h, --help                  Print help (see more with '--help')
  -V, --version               Print version

配置

可以通过配置文件覆盖命令行参数。

有关默认配置值的详细信息,请参阅 gpg-tui.toml

可以通过 --config 参数或 GPG_TUI_CONFIG 环境变量指定配置文件。此外,它还可以放置到 gpg-tui 查找的位置

  • <config_dir> / gpg-tui.toml
  • <config_dir> / gpg-tui/gpg-tui.toml
  • <config_dir> / gpg-tui/config

<config_dir> 的值取决于平台,如下表所示

平台 示例
Linux $XDG_CONFIG_HOME$HOME/.config /home/alice/.config
macOS $HOME/Library/Application Support /Users/Alice/Library/Application Support
Windows {FOLDERID_RoamingAppData} C:\Users\Alice\AppData\Roaming

键盘绑定

用户界面

快捷键 动作
? 显示帮助
o,空格,回车 显示选项
hjkl,箭头键,pgkeys 导航
n 切换到正常模式
v 切换到可视模式
c 切换到复制模式
p,C-v 从剪贴板粘贴
a 切换武装输出
1,2,3 设置详细级别
t,tab 切换详细(全部/选中)
` 切换表格边距
m 切换表格大小
C-s 切换样式
/ 搜索
: 运行命令
C-l,f2 显示日志
r,f5 刷新应用程序
q,C-c/d,escape 退出应用程序

密钥管理

快捷键 动作
x 导出密钥
s 签名密钥
e 编辑密钥
i 导入密钥
f 接收密钥
u 发送密钥
g 生成密钥
d,退格键 删除密钥
C-r 刷新密钥

自定义

快捷键可以通过在 配置文件 中使用 general.key_bindings 设置进行覆盖或自定义。例如,

key_bindings = [
  { keys = [ "?", "h", "f1" ], command = ":help" },
  { keys = [ "C-s", "s" ], command = ":style colored" },
  { keys = [ "C-d", "C-c", "q" ], command = ":quit" },
]

keys 数组包含键码,可以是单个键(例如 a),键组合(例如 Control-C: C-c,Alt-C: A-c),或特殊键(例如 BackspaceEnter)。可用键码可以在 crossterm 文档 中找到。

还可以查看 命令列表

方法

在密钥环中可用的密钥(可以通过 --homedir 参数指定)在一个表中显示。此表由两列组成,分别是 密钥信息用户信息

单个表行显示的详细程度由 详细级别 确定。

详细程度

  1. 最小:仅显示主密钥和用户 ID。
[sc--] rsa3072/B14085A20355B74DE0CE0FA1E19F76D037BD65B6  │  [u] Example Key <example@key>
  1. 标准:显示所有子密钥和用户 ID。
[sc--] rsa3072/B14085A20355B74DE0CE0FA1E19F76D037BD65B6  │  [u] Example Key <example@key>
|      └─(2021-05-14)                                    │   └─[u] Other User ID <example@key>
[--e-] rsa3072/E56CAC142AE5A979BEECB00FB4F68595CAD4E7E5  │
       └─(2021-05-14)
  1. 完全:显示签名和注释。
[sc--] rsa3072/B14085A20355B74DE0CE0FA1E19F76D037BD65B6  │  [u] Example Key <example@key>
|      └─(2021-05-14)                                    │   │  └─[13] selfsig (2021-05-16)
[--e-] rsa3072/E56CAC142AE5A979BEECB00FB4F68595CAD4E7E5  │   │     └─[h] test@notation=xyz
       └─(2021-05-14)                                    |   └─[u] Other User ID <example@key>
                                                                   ├─[13] selfsig (2021-05-16)
                                                                   └─[10] 84C39331F6F85326 Other Signer Key <example@signer> (2021-05-16)

可以使用 --detail-level 参数或 配置文件 中的 detail_level 条目来设置详细级别。

密钥信息

以下通过参考编号解释了详细级别full(包括子键)的示例表项。

[sc--]  rsa3072¹/B14085A20355B74DE0CE0FA1E19F76D037BD65B6²
|³       └─(2021-05-14)
[--e-]*rsa3072¹/E56CAC142AE5A979BEECB00FB4F68595CAD4E7E5²
         └─(2021-05-14) -> (2021-05-16) [exp]

0:键标志。确定键可以做什么。

  • s:签名
  • c:认证
  • e:加密
  • a:认证

1:键的算法。

2:键的指纹。

3:指示下一个键是一个子键。

4:键的时间信息

  • 创建时间(Y-m-d
  • 过期时间(Y-m-d

5:该键是否属于以下之一?

  • [exp]:已过期
  • [rev]:已撤销
  • [d]:已禁用
  • [i]:无效
  • [q]:合格

6:星号(*)显示在键标志之后,如果键被选为默认签名键。

用户信息

以下通过参考编号解释了详细级别full(包括其他用户ID、签名和注释)的示例表项。

[u] Test Key <test@test>¹²  └─[13]³ selfsig (2021-05-16)
 │             └─[h] test@notation=xyz
 └─[u] Test Key2 <test2@test2>¹
        ├─[13]³ selfsig (2021-05-16)
        └─[10]³ 84C39331F6F85326 Test Key 2 <test2@example.com> (2021-05-16) [!x]

0:用户的有效性。

  • [q]:未定义
  • [n]:从未
  • [m]:边缘
  • [f]:完全
  • [u]:终极
  • [?]:未知

1:用户ID。(name + email)

2:指示下一个用户ID。

3:签名的认证级别。

  • [10]:无指示
  • [11]:个人信念但未验证
  • [12]:随意验证
  • [13]:广泛验证

4:指示这是一个自签名,即用户用自己的私钥签名了自己的公钥。

5:签名的键和用户ID。(key + name + email)

6:签名的时问信息。

  • 创建时间(Y-m-d
  • 过期时间(Y-m-d

7:该签名是否属于以下之一?

  • [exp]:已过期
  • [rev]:已撤销
  • [i]:无效
  • [!x]:不可导出

8:注释数据。

9:与注释数据关联的标志。

  • [h]:注释数据为人类可读格式
  • [!]:表示数据表示法是关键的

功能

在运行终端界面时,按?可查看有关快捷键和 GnuPG 配置的信息。

用户界面

滚动

使用箭头键或hjkl键滚动和导航列表/菜单/选项卡。此外,您还可以使用Ctrl-Up/Down组合或PageUp/PageDown键向上/向下滚动。

如果行无法适应终端界面,请使用Alt + 箭头键/hjkl键单独滚动它们。

选项菜单

大多数操作都可以通过选项菜单执行。只需按Enter,然后选择您要执行的操作。

复制/粘贴

存在一个copy模式,以便更容易地将特定值复制到剪贴板。要使用此模式,请按c后跟一个键绑定

  • x:复制导出的密钥
  • i:复制密钥 ID
  • f:复制密钥指纹
  • u:复制用户 ID
  • 1,2:复制行的内容

然后值将被复制到剪贴板,应用程序模式将恢复到normal

在此操作期间,按ESCn取消并切换到normal模式。

除了使用copy模式复制值之外,您还可以使用visual模式,该模式禁用鼠标捕获。这意味着您可以选择/突出显示界面上方的文本,然后像通常一样复制。

visual模式也可以用于其他目的,例如通过鼠标滚动。

选择模式

在选择模式中,负责显示选项菜单的键绑定(例如enter)用于退出用户界面并将选择打印到标准输出。这对于您想将gpg-tui与shell命令/其他工具结合使用非常有用。

要切换到选择模式,请使用以下格式的--select参数

gpg-tui --select <option>

<option>可能是以下之一

  • key:导出的密钥
  • key-id:密钥 ID
  • key-fingerprint:密钥指纹
  • user-id:用户 ID
  • row<n>:第n行的内容

例如,您可以使用以下shell函数为选定的收件人(密钥 ID)加密文件

function encrypt() { gpg -e -r $(gpg-tui --select key-id) "$@"; }

详细视图

Tab切换列表中选定条目的详细级别。数字键(例如123)也可以用于设置特定级别。

t切换列表中所有条目的详细级别。

有几个不同的表格大小模式,这些模式会更改每个条目显示的详细信息。您可以使用m键在不同的模式之间切换。

/ 搜索当前显示表中的值。

文件浏览器

一些关键的管理操作,如导入密钥可选 使用文件浏览器工具。默认情况下,gpg-tui 如果系统上已安装 xplr 二进制文件,则使用 xplr。要更改将要使用的工具,可以使用 --file-explorer 参数,也可以在 配置文件 中指定。

gpg-tui --file-explorer "fzf --color dark"

显示日志

要查看日志消息,请按 ctrl-l。它将在 TUI 中弹出一个面板用于分析日志

此面板由两部分组成。左边是目标选择器,右边是向上滚动的日志消息视图。

目标选择器控制

  • 由记录器捕获的日志消息。
  • 选择要在日志消息视图中显示的级别。

两列具有以下含义

  • 代码 EWIDT: E 代表错误,W 代表警告,同样 Info,Debug 和 Trace。
    • 反转字符(EWIDT)是视图中启用的日志级别。
    • 正常字符表示每个目标启用了日志级别的捕获。
    • 如果 EWIDT 中有任何未显示,则相应的日志级别未捕获。

此记录器面板具有以下键绑定,并且仅在显示日志时激活

动作
h 切换目标选择器小部件的隐藏/显示
f 仅切换到所选目标上的焦点
在目标选择器小部件中选择上一个目标
在目标选择器小部件中选择下一个目标
减少显示的日志消息级别
增加显示的日志消息级别
- 减少捕获的日志消息级别
+ 增加捕获的日志消息级别
pageup 进入页面模式,并在日志历史中向上滚动约半页
pagedown 仅页面模式:在日志历史中向下滚动 10 个事件
escape 退出页面模式并返回滚动模式
空格 切换隐藏已将 logfilter 设置为关闭的目标

要保存日志到文件,可以使用 --log-file 参数

gpg-tui --log-file gpg-tui.log

RUST_LOG 环境变量可以用来设置相应的日志级别。

RUST_LOG=debug gpg-tui

运行命令

终端界面上每个操作都由特定应用的命令隐式处理。因此,可以通过按 : 切换到命令模式并运行命令来执行某些操作。(类似于 Vim)

例如,

  • :list pub -> 列出公钥
  • :set armor true -> 启用带装甲的输出

完整的命令列表可以在这里找到。

您也可以通过按 Tab 在命令模式和搜索之间切换。

密钥管理

列表

默认情况下,密钥环中的可用键在表中列出。可以通过箭头键更改选项卡来滚动或更改列表类型(公钥/私钥)。

有关表格行含义的更多信息,请参阅方法部分。

导出

按下 x 将选定的密钥导出到文件。默认输出目录为 $GNUPGHOME/out,可以通过使用 --homedir--outdir 参数进行更改。

此外,您还可以通过按下 a 来启用/禁用带装甲的输出。

您还可以通过选项菜单导出密钥的私有子密钥。

签名

按下 s 使用默认的私有密钥对选定的密钥进行签名。此密钥可以用 --default-key 参数或使用选项菜单指定。

此功能使用 gpg 回退并运行 gpg --sign-key 命令。

编辑

按下 e 编辑选定的密钥。

此功能使用 gpg 回退并运行 gpg --edit-key 命令。它显示一个菜单,提供更改密钥详细信息的选项列表。有关更多信息,请参阅编辑密钥文档。

导入/接收

导入操作使用文件浏览器来选择要导入的密钥。按下 i 启动文件浏览器(默认为 xplr),然后选择要导入的密钥文件。

如果没有指定或安装文件浏览器,导入操作将通过使用 :import 命令来完成。因此,请按下 i 切换到命令模式(将自动添加导入命令),然后提供要导入的文件。

您还可以使用 :import-clipboard 命令或选项菜单从剪贴板导入密钥。

与导入类似,接收操作也是通过使用 :receive 命令完成的。因此,请按 f(用于从密钥服务器检索密钥)并给出您的密钥标识符。

此功能使用 gpg 回退并运行 gpg --receive-keys 命令。

发送

u(用于上传到密钥服务器)后按 y(用于确认)以将选定的密钥发送到默认密钥服务器。

生成

g 生成新的密钥对。

此功能使用 gpg 回退并运行 gpg --full-generate-key 命令。它显示所有生成选项的对话框。

删除

按下 Backspace 后按 y(用于确认)以从密钥环中删除选定的密钥。

刷新

按下 Ctrl-y 以刷新密钥环。

此功能使用 gpg 回退并运行 gpg --refresh-keys 命令。

样式

您可以根据需要自定义 gpg-tui 的外观,以摆脱其 无聊简约 的氛围。(!)

颜色

要启用颜色,您可以通过指定带有 --style 参数的样式或运行时按 Ctrl-S 来切换样式。目前,仅支持一种样式,即 colored

gpg-tui --style colored

如果界面默认的 强调 颜色与您的主题冲突,或者您想将其更改得更鲜艳,可以使用 --color 参数来指定十六进制格式的另一种颜色。

gpg-tui --style colored --color 507030

要禁用颜色

gpg-tui --style plain

或者,您可以设置 NO_COLOR 环境变量。

启动画面

如果存在 --splash 标志,将显示一个显示项目标志几秒钟的启动画面。这纯粹是装饰性的。

gpg-tui --splash

要启用启动画面的颜色,请使用 colored 样式。

gpg-tui --splash --style colored

路线图

平台

gpg-tui 在开发阶段在 Linux 系统上进行了测试。它应该在其他平台(如 Microsoft Windows 和 macOS)上进行测试,并且发现的问题应报告以供这些平台未来的兼容性。

打包

Packaging status

gpg-tui 应该更容易在其他平台/发行版上访问。因此,它应该为包管理器(如 HomebrewAPT)打包。如果您是打包者并希望贡献,请随时 提交一个问题开始一个讨论

命令行回退

gpg-tui 的一些功能需要执行 CLI 程序 gpg 来操作。这是由于为 gpg 已经提供的菜单设计 TUI 是重复的且耗时。另外,如果这些菜单在未来将发生变化,最好是依赖 gpg 而不是使用 GPGME 实现这些选项。另一方面,gpg 有一些命令是 GPGME 直接不提供的。(例如 --refresh-keys)因此,在这种情况下利用 gpg 更方便。

gpg-tui 的未来计划是在必要时利用 gpg,根据它对用户是否更方便。

仅密钥管理

gpg-tui 目前只针对 密钥管理,尽管它可以通过利用 GPGME 和/或 gpg 做得更多。这既是设计选择,也是为项目设定边界的考虑。

资源

关于本项目

媒体报道

联系方式

  • Join Matrix Room
  • Follow @gpg_tui
  • https://orhun.dev
    • Follow @orhun
    • Follow @orhunp_

资助

如果您认为我的 GitHub 个人资料 上的 gpg-tui 和/或其他项目有用,请考虑在 GitHub Sponsors 上支持我或 成为赞助者

Support me on Patreon Support me on Patreon

许可证

MIT 许可证

版权所有 © 2021-2023,Orhun Parmaksız

依赖关系

~33–46MB
~443K SLoC