#yubi-key #notifications #gpg #sockets

app socket-notify

从套接字读取(scdaemon)消息,发出通知提醒您触摸您的 Yubikey

2 个版本

使用旧的 Rust 2015

0.1.1 2017年10月12日
0.1.0 2017年10月11日

#7 in #yubikey

28 每月下载量

MIT 许可证

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