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