从命令行解锁 Gnome 密钥环守护进程

从命令行解锁 Gnome 密钥环守护进程

我试图通过直接向其传递密码来从命令行解锁 Gnome Keyring Daemon。我尝试了 --daemonize、--login、--start 的一些变体,但我无法让它工作。

echo $password | gnome-keyring-daemon --unlock返回SSH_AUTH_SOCK=/run/user/1000/keyring/ssh但没有解锁任何东西。

基本上我想要一些类似的东西:

gnome-keyring-daemon unlock --pw $password

不确定这是否有什么区别,但我使用的是 Manjaro i3wm 版本,所以不使用桌面环境。

背景:

我正在使用 KeePassXC 来管理我的密钥环。这样做的一个缺点是,我无法在登录时自动解锁密钥环。由于我不想输入两个长密码,因此我想出了以下脚本作为解决方法:

  • 登录自动解锁 Gnome Keyring Daemon
  • Gnome Keyring Daemon 包含(一部分)KeePassXC 的 PW 作为唯一条目
  • 在提示中输入密码的最后一个字符
  • 杀死 Gnome 钥匙圈守护进程
  • 使用组合密码解锁 KeePassXC

现在我想做相反的事情来再次锁定 KeePassXC:

  • 从 KeePassXC 获取 Gnome Keyring Daemon 的 PW
  • 杀死 KeePassXC
  • Unlock GnomeKeyringDaemon <- 这是我无法工作的部分

答案1

(现在)有一个--unlockgnome-keyring-daemon 的参数,它完全可以满足您的需求。通常,当它被调用时,它会解锁然后妖魔化并回显SSH_AUTH_SOCK.如果您认为可能已经有一个现有守护进程在运行,那么您可以添加该--replace参数以确保无缝过渡到新守护进程。

我定期使用公钥(无密码)通过 ssh 登录无头 Ubuntu 20.0.4LTS 系统,但有时出于开发目的,我需要可用密钥环。因此,我在 bash 配置文件中定义了以下函数,并且它可以很好地进行解锁(无论是否有现有的守护进程正在运行):

# Linux unlock gnome keyring
function unlock-keyring ()
{
    read -rsp "Password: " pass
    export $(echo -n "$pass" | gnome-keyring-daemon --replace --unlock)
    unset pass
}

答案2

这是一种非常残酷、肮脏、可能非常错误的方法,但在努力通过 SSH 解锁我的密钥环一段时间后,我想出了这个小脚本:

echo 'NOTE: This script will only work if launched via source or .' >&2
echo -n 'Login password: ' >&2
read -s _UNLOCK_PASSWORD || return
killall -q -u "$(whoami)" gnome-keyring-daemon
eval $(echo -n "${_UNLOCK_PASSWORD}" \
           | gnome-keyring-daemon --daemonize --login \
           | sed -e 's/^/export /')
unset _UNLOCK_PASSWORD
echo '' >&2

是的,当我打电话. ~/bin/unlock-gnome-keyring并输入登录密码时,它会解锁我的登录密钥环,我可以在seahorse通过远程 X 运行时查看它并通过 libsecret 应用程序使用它。

但请注意,我不是安全专家这样做可能会产生严重的安全隐患。我没有检查密码是否在内存等中被正确清理,这可能会使您更容易受到攻击。

答案3

我无法让任何echo -n "pass" | gnome-keyring-daemon命令组合起作用。我还尝试了该secret-tool命令和几个 Python 库,但大多数都已过时,并且它们都没有解锁我在 Seahorse 中的密钥环 - 或者只是触发了 GUI 密码提示。

唯一对我有用的是我找到的一个Python脚本,可以在吉图布科德伯格,只要我安装了 Python,就可以完成这项工作。下载脚本就像运行一样简单:

wget https://codeberg.org/umglurf/gnome-keyring-unlock/raw/branch/main/unlock.py
chmod +x unlock.py

之后,以下命令解锁名为“Login”的默认密钥环(通常存在,gnome-keyring-daemon如果不存在,该命令也会创建它):

./unlock.py <<<PASSWORDHERE

如果您还想解锁非默认密钥环,只需使用该密钥环的名称和密码在“登录”密钥环中创建一个项目即可。这使您可以选择在“登录”密钥环解锁时自动解锁该密钥环。

答案4

对于某些用例,删除密钥环上的密码会很方便。因此不需要解锁它:

在 Ubuntu 22.04 上:搜索“seahorse”并打开。右键单击“密码”下的“登录”(可能需要执行几次,一开始不起作用)。在上下文菜单中选择“更改密码”。输入当前密码并将新密码字段留空。接受“存储未加密的密码?”。

相关内容