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.