我试图通过直接向其传递密码来从命令行解锁 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
(现在)有一个--unlock
gnome-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”并打开。右键单击“密码”下的“登录”(可能需要执行几次,一开始不起作用)。在上下文菜单中选择“更改密码”。输入当前密码并将新密码字段留空。接受“存储未加密的密码?”。