2 个版本
使用旧的 Rust 2015
0.1.1 | 2017年10月12日 |
---|---|
0.1.0 | 2017年10月11日 |
#7 in #yubikey
28 每月下载量
8KB
87 行
套接字通知器
可能是迄今为止最无聊的项目名称?
动机
我使用 Yubikey 进行 GPG 操作。我签署我的提交。我将 gpg-agent 作为 ssh 代理使用。这是一种非常方便的方法,可以获得相当高的安全性。
但是,每天有好几次,我去提交代码或推送分支,结果却因为我没有触摸闪烁的灯光而超时,我的推送操作超时了。我非常讨厌这种情况,尤其是因为它意味着我的同事们在等待一个永远不会到达的修复。
我曾经有过预提交钩子和 SSH 包装来提醒我可能需要验证签名,但这导致了 问题。 此外,没有为签名的标签提供执行此操作的方法,而我经常使用签名的标签。
所以我开始使用带有 netcat 的 bash 脚本
#!/bin/sh
source /etc/profile
nc -lU /tmp/scdaemon.sock | while read line; do
if echo $line | egrep -q 'PK(SIGN|AUTH)'; then
notify-send "GPG activity" "A process is waiting on the Yubikey!"
echo "Notifying" >> /tmp/scdaemon.log
fi
echo $line >> /tmp/scdaemon.log
done
但是通知在签名发生后仍然存在,这意味着我需要投入注意力来关闭它们或区分旧的通知和新通知,这意味着我需要确认它。
解决方案
设置一个像这样的 .gnupg/scdaemon.conf
log-file socket:///tmp/scdaemon.sock
debug 1027
debug-assuan-log-cats 511
为了让 scdaemon 识别配置,您必须 gpg-agent-connect scd killscd
。(或者类似的东西 - 如果您改进了命令,请将其 PR 到文档中?)
然后 cargo install socket-notify
并在您登录时安排它运行。例如,我有的
~/.config/systemd/user/scdaemon-notify.service
:
[Unit]
Description=SmartCard Daemon Notifier
PartOf=graphical-session.target
[Service]
# The path will be different, because systemd requires absolute paths...
ExecStart=$(which socket-notify)
[Install]
WantedBy=graphical-session.target
...et voila! 当您需要进行签名或身份验证操作的验证时,您应该会收到像“GPG Event”这样的通知。当您批准签名(或它超时)时,通知将被短暂更新的通知所取代。
未来计划
(如果有人要求,或者我有这种冲动 - 不要假设这会自动发生)
目前,一切都是硬编码的。指定一个配置文件来指定套接字位置、是否记录以及记录位置(目前,这总是记录到 /tmp/scdaemon.log)、触发通知的模式以及“回答”通知的模式将非常棒。
依赖关系
~5.5–8MB
~165K SLoC