Eu uso uma solução que é um pouco mais complicada, mas muito versátil, pois quero manter alguma separação nas chaves de identidade SSH usadas para meus servidores de rede doméstica, servidores de escritório, servidores de rede de clientes de consultoria e outros sistemas em que tenho contas.
Agora que falei, trabalho em estações de trabalho Linux quase exclusivamente, por isso tenho uma chave USB que é configurada usando a criptografia LUKS e meu gerenciador de janelas X11 junto com o daemon HAL detectam a unidade criptografada LUKS e solicitam a frase secreta de descriptografia quando ela é inserida e tentou ser montado. Ao armazenar isso em uma unidade criptografada do jeito que eu faço, eu nunca armazeno minhas chaves SSH em qualquer estação de trabalho.
Eu, então, tenho a seguinte configuração no meu arquivo ~/.ssh/config :
Host *
Protocol 2
IdentityFile %d/.ssh/keys.d/id_rsa.%l
IdentityFile %d/.ssh/keys.d/id_dsa.%l
IdentityFile %d/.ssh/keys.d/%u@%l
O % d é traduzido para ser o diretório home do usuário pelo OpenSSH e no diretório ~ / .ssh que criei keys.d como um link simbólico para o caminho do diretório na unidade USB criptografada quando estiver devidamente montado.
A expressão % l é traduzida para ser o nome do host das máquinas clientes locais e % u será traduzida para o nome de usuário do cliente local.
O que esta configuração faz é permitir que o SSH procure uma chave usando 3 expressões diferentes. Por exemplo, se o nome de usuário do meu cliente local for jdoe e o nome da minha máquina cliente local for examplehost , a ordem seguinte será encontrada até que encontre uma chave que tenha sido aceita pelo servidor remoto.
/home/jdoe/.ssh/keys.d/id_rsa.examplehost
/home/jdoe/.ssh/keys.d/id_dsa.examplehost
/home/jdoe/.ssh/keys.d/jdoe@examplehost
Você pode até usar a expressão % r para procurar uma chave específica para o nome de usuário do servidor remoto ou % h para o nome do host do servidor remoto como % u e % l foram usados.
Atualização: Agora eu realmente utilizo o gnuPG-gpg-agent com compatibilidade ssh-agent para apenas ler e usar a chave de autenticação do meu smartcard OpenPGP v2.