原理

密码本

在命令行世界中,许多认证工具,诸如 git,ssh 本身是无状态的,也就是说没法记住输入的密码,这导致一个巨大的问题,就是运行一些习以为常的命令,每次都要输入密码,固然是安全,但是大多时候严重拖慢了效率。

而 libsecret 就是为了解决这个问题而出现的。

他就是一个集中的密码本,帮助我们去记住密码。

底层 keyring

keyring service 是密码环服务,它是一个在后台运行的 daemon,是真的密码本,负责实际存储,加密与管理密码,token,证书以及密钥。

在 gnome 环境下是 gnome-keyring,在 kde 环境是 kwallet

实际 libsecret

是一个库,是标准化的 API,充当了应用程序与 keyring 的桥梁。

libsecret

使用

安装

还是以 arch 为例。

sudo pacman -S gnome-keyring libsecret seahorse

seahorse 就是一个管理 gnome-keyring 的前端。

在 shell 中输入 seahorse 就可以用 GUI 来查看管理密码了。

还需要一个 git-credential-libsecret 这个在 git 软件包里面。

如果没有安装 git,那就再安装一下 git

配置

配置 pam

其实安装了 gnome-keyring 的时候会自动配置。

所以不用管。

位置在 /etc/pam.d/sddm,不过这取决于你是用的是什么登录配置文件,我用的是 sddm。

有下面两条就行:

-auth optional pam_gnome_keyring.so
-session optional pam_gnome_keyring.so auto_start

-optional 意味着即便密钥环解锁失败也可以成功登录。

auto_start 表示自动启动。

配置 wm 会话文件

如果是 sddm 的话,位置是 /usr/share/wayland-sessions/xxx.desktop,我用的 niri 就是 niri.desktop

我用的 niri,启动的是 niri-session,这个脚本已经设置了自动启动 dbus,所以不用配置。

这里如果配置了,就因为启动了两个 dbus 导致冲突,无法进入 niri 界面了。

有些可能没有 dbus 环境,需要配置一下。

配置 git

git config --global credential.helper /usr/lib/git-core/git-credential-libsecret

这就可以了。

当使用 git push 的时候,只用第一次输入密码,之后就不需要输入了。