Como posso executar o keychain de uma maneira que tenha apenas o primeiro prompt do shell para chaves na inicialização?

4

Eu abro várias guias do shell quando inicio o KDE, e acabei de adicionar keychain para o meu ~/.shellrc o problema é que todas as abas solicitam senhas chave quando eu faço o login. Isso é muito chato para fazer isso. Existe alguma boa solução para isso, de modo que todas as abas simplesmente iniciem, e uma vez que eu tenha logado em uma aba, todas elas têm as teclas carregadas?

    
por xenoterracide 18.12.2010 / 12:45

1 resposta

2

Aqui estão dois métodos:

Você pode garantir que as chaves só sejam abertas em uma guia como esta:

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

Mas pode não estar na primeira guia em que você acessa - você pode ter que procurá-la, o que pode ser irritante. Isso funciona porque o mkdir é uma operação atômica - somente um script será bem-sucedido e esse exibirá o prompt.

Outra maneira exibirá o prompt em todas as guias, mas será encerrada assim que você responder em qualquer uma delas. Você pode pesquisar um arquivo ou usar inotify-tools como este:

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

Este apresenta o prompt, mas primeiro ele inicia um observador para ver se um arquivo é excluído. Depois que o prompt for satisfeito, o arquivo será excluído e o inspetor matará todos os outros prompts que estiverem aguardando. inotifywait é de inotify-tools; inotify é uma API do Linux. Pode haver uma API semelhante em outros Unices, mas se não, você só precisa de um loop que apura para ver se o arquivo é excluído.

    
por 18.12.2010 / 15:08