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 密码学
320KB
6.5K SLoC
关于
gpg-tui 是一个 基于文本的用户界面,用于 GnuPG。
它旨在通过提供界面和命令行回退(用于更复杂的操作)来简化密钥管理操作,例如列出/导出/签名。它并不是试图成为 所有 由 gpg 提供的功能的完整界面,但它试图为密钥管理带来更交互的方式。
演示

gpg-tui --style colored --splash --homedir /etc/pacman.d/gnupg
需求
- Rust:
>=1.70.0 - 核心依赖项:
gnupg,gpgme>=1.12.0,libgpg-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
安装
Cargo
gpg-tui 可在 crates.io 获取
cargo install gpg-tui
Arch Linux
社区
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
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),或特殊键(例如 Backspace,Enter)。可用键码可以在 crossterm 文档 中找到。
还可以查看 命令列表。
方法
在密钥环中可用的密钥(可以通过 --homedir 参数指定)在一个表中显示。此表由两列组成,分别是 密钥信息 和 用户信息。
单个表行显示的详细程度由 详细级别 确定。
详细程度
- 最小:仅显示主密钥和用户 ID。
[sc--] rsa3072/B14085A20355B74DE0CE0FA1E19F76D037BD65B6 │ [u] Example Key <example@key>
- 标准:显示所有子密钥和用户 ID。
[sc--] rsa3072/B14085A20355B74DE0CE0FA1E19F76D037BD65B6 │ [u] Example Key <example@key>
| └─(2021-05-14) │ └─[u] Other User ID <example@key>
[--e-] rsa3072/E56CAC142AE5A979BEECB00FB4F68595CAD4E7E5 │
└─(2021-05-14)
- 完全:显示签名和注释。
[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:复制密钥 IDf:复制密钥指纹u:复制用户 ID1,2:复制行的内容
然后值将被复制到剪贴板,应用程序模式将恢复到normal。
在此操作期间,按ESC或n取消并切换到normal模式。

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

选择模式
在选择模式中,负责显示选项菜单的键绑定(例如enter)用于退出用户界面并将选择打印到标准输出。这对于您想将gpg-tui与shell命令/其他工具结合使用非常有用。
要切换到选择模式,请使用以下格式的--select参数
gpg-tui --select <option>
<option>可能是以下之一
key:导出的密钥key-id:密钥 IDkey-fingerprint:密钥指纹user-id:用户 IDrow<n>:第n行的内容

例如,您可以使用以下shell函数为选定的收件人(密钥 ID)加密文件
function encrypt() { gpg -e -r $(gpg-tui --select key-id) "$@"; }
详细视图
按Tab切换列表中选定条目的详细级别。数字键(例如1,2,3)也可以用于设置特定级别。

按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)上进行测试,并且发现的问题应报告以供这些平台未来的兼容性。
打包
gpg-tui 应该更容易在其他平台/发行版上访问。因此,它应该为包管理器(如 Homebrew 和 APT)打包。如果您是打包者并希望贡献,请随时 提交一个问题 或 开始一个讨论!
命令行回退
gpg-tui 的一些功能需要执行 CLI 程序 gpg 来操作。这是由于为 gpg 已经提供的菜单设计 TUI 是重复的且耗时。另外,如果这些菜单在未来将发生变化,最好是依赖 gpg 而不是使用 GPGME 实现这些选项。另一方面,gpg 有一些命令是 GPGME 直接不提供的。(例如 --refresh-keys)因此,在这种情况下利用 gpg 更方便。
gpg-tui 的未来计划是在必要时利用 gpg,根据它对用户是否更方便。
仅密钥管理
gpg-tui 目前只针对 密钥管理,尽管它可以通过利用 GPGME 和/或 gpg 做得更多。这既是设计选择,也是为项目设定边界的考虑。
资源
关于本项目
外部链接
媒体报道
联系方式
资助
如果您认为我的 GitHub 个人资料 上的 gpg-tui 和/或其他项目有用,请考虑在 GitHub Sponsors 上支持我或 成为赞助者!
许可证
版权
版权所有 © 2021-2023,Orhun Parmaksız
依赖关系
~33–46MB
~443K SLoC
