如何在电源管理活动时刷新我的 ssh 密钥?

如何在电源管理活动时刷新我的 ssh 密钥?

按照惯例使用ssh-agent和私钥。一切正常。

我的问题是关于从睡眠、挂起、休眠等活动中刷新按键的最佳实践。ssh-add我考虑过为这些命令编写一个简单的包装器,但后来想知道它们是否真的被调用?或者内核是否直接启动此活动?PM 实用程序是否严格属于用户空间?

除了锁定屏幕等之外,我还希望有额外的安全保护层,想知道是否有其他人已经完美地解决了这个问题或有最佳实践可以推荐。谢谢。

答案1

您可能能够让用户守护进程监听 D-Bus 上的状态变化。gnome-power-manager 似乎没有为此公开任何信号,但您可能能够从 hal 或 DeviceKit-power/upower 中获取一些信号。

答案2

我有一个小pm脚本,在挂起/休眠、恢复/解冻时为每个登录用户运行用户定义的脚本。我用它来终止或重新启动挂起时表现不佳的进程。用户可以创建脚本,在~/.user-pm挂起时按字典顺序运行,在恢复时按相反顺序运行。 $1具有 pm 操作名称。

您可以简单地添加一个在挂起/休眠时调用“ ”的用户脚本ssh-add -D。(您必须在SSH_AUTH_SOCK某处查找,但我认为您需要它来获得任何解决方案)。

这是全局pm钩子:

> cat /etc/pm/sleep.d/10_run_user_parts
#!/bin/sh

USER_PM_DIR=".user-pm"

# foreach logged in user
for user in `users | grep -o "\S*" | sort -u`; do
    user_home=`getent passwd "${user}" | awk -F: '{print $6}'`

    # check user has a valid home-directory
    [ -d $user_home ] || continue

    user_pm_dir="$user_home/$USER_PM_DIR"
    # check for user-pm directory
    [ -d "$user_pm_dir" ] || continue

    # call run-parts as $user
    case "$1" in
        hibernate|suspend)
        su -c "run-parts --arg=\"$1\" \"${user_pm_dir}\"" "${user}"
        ;;
        thaw|resume)
        su -c "run-parts --reverse --arg=\"$1\" \"${user_pm_dir}\"" "${user}"
        ;;
        *) exit $NA ;;
    esac
done

我在 ubuntu 上 - 这也应该适用于 debian - 否则,YMMV

答案3

如果您使用“ssh-add”的“-c”选项添加密钥,则需要您确认每次使用。这不如在暂停时从代理中删除密钥那么好,如果您还锁定屏幕,则会产生类似的效果,因为密钥的使用只有在您登录后才能确认。

过去,我通过运行一个简单的脚本来完成此键的删除,该脚本每隔几秒钟唤醒一次并查找锁定屏幕的程序,如果找到,它将执行“ssh-add -D”。然后,一旦它消失,它会再次调用“ssh-add -c”来询问我的密码。当我挂起或离开键盘时,我最终切换到仅依靠确认和屏幕锁定。

答案4

这是另一种间接解决方案,不涉及从代理中清除已注册的身份/密钥,但锁定 ssh-agent 是否同样有用 ( ssh-add -x)?我不确定这种方法有多安全(当然远不如从代理中删除密钥那么安全),但我认为此功能是为了提供您在这种情况下所寻求的额外安全性而实现的。

相关内容