如何以在启动时只有第一个 shell 提示输入密钥的方式运行钥匙串?

如何以在启动时只有第一个 shell 提示输入密钥的方式运行钥匙串?

当我启动 KDE 时,我打开多个 shell 选项卡,并且我刚刚添加了keychain对我来说,~/.shellrc问题是当我登录时,所有选项卡都会提示输入关键密码。这样做是相当烦人的。是否有任何好的解决方案,以便所有选项卡都可以启动,并且一旦我登录到一个选项卡,所有选项卡都已加载密钥?

答案1

这里有两种方法:

您可以确保钥匙串仅在一个选项卡上打开,如下所示:

if mkdir /tmp/keychain.lock; then
  eval `keychain --eval --agents ssh id_dsa`
  rm -r /tmp/keychain.lock
fi

但它可能不在您登陆的第一个选项卡上 - 您可能必须寻找它,这可能同样烦人。这是可行的,因为 mkdir 是一项原子操作 - 只有一个脚本会成功,并且该脚本将显示提示。

另一种方法将在所有选项卡上显示提示,但一旦您对其中任何一个选项卡做出响应,就会退出它们。您可以轮询文件或使用 inotify-tools,如下所示:

file=/tmp/keychain-wait
touch $file
inotifywait -e delete_self $file |\
while read file event; do 
 if [ "$event" = "DELETE_SELF" ]; then
   pkill keychain
 fi
done &

keychain
rm $file

这个会出现提示,但首先它会启动一个观察程序来查看文件是否被删除。满足提示后,文件将被删除,并且观察者将终止任何正在等待的其他提示。 inotifywait 来自 inotify-tools; inotify 是一个 Linux API。其他 Unices 上可能有类似的 API,但如果没有,您只需要一个循环来轮询文件是否被删除。

相关内容