Existe uma maneira de especificar a lista de chaves privadas para adicionar ao ssh-agent?

1

Depois de algumas horas de escavação, eu finalmente descobri porque meu computador parou de me pedir minha (s) chave (s) usando o gnome ssh-askpass. Foi muito simples, mas demorei para descobrir porque ... bem ... a maioria das pessoas que estão tendo problemas semelhantes é por uma razão completamente diferente (ou seja, o ssh-agent não está funcionando).

No meu caso, eu tinha muitas chaves em ~/.ssh , então o que eu fiz foi mover todas elas, exceto id_rsa em um subdiretório: ~/.ssh/other_keys . Isso funcionou com o propósito de acessar alguns computadores usando apenas a opção de linha de comando -i como em:

ssh -i ~/.ssh/other_keys/topsecret domain

Caso contrário, você terá que dizer ao SSH para não testar todas as chaves encontradas em seu diretório ~/.ssh (porque quando isso acontece, ele esgota o número de tentativas que normalmente é bem pequeno, como 3 ou 5.)

Para corrigir esse problema, você também pode fazer isso:

ssh -i ~/.ssh/topsecret -o 'IdentitiesOnly yes' domain

O que é muita digitação (sim, você também pode adicioná-lo ao seu arquivo de configuração, mas se isso é apenas para um teste rápido, isso é um aborrecimento.)

Então ... tudo isso funciona muito bem para quando eu quero conectar uma vez aqui ou uma vez lá, mas é doloroso quando eu quero ir para um dos meus servidores principais porque ssh agora me pede a minha senha cada acesso, mesmo que meus ssh-agent e ssh-askpass estejam configurados corretamente.

Então ... o que dá?

De alguma forma, quando você inicia ssh-add , ele adiciona automaticamente as chaves ao ssh-agent sem pedir suas senhas. Então, quando você precisar usar a chave, ela iniciará automaticamente seu ssh-askpass (sem necessidade de uma variável com esse nome em seu ambiente, btw), onde você poderá inserir sua senha e seguir em frente.

Se as chaves forem definidas em um subdiretório, elas não serão encontradas, portanto, não serão adicionadas ao ssh-agent e, quando você usar ssh , elas não serão encontradas no ssh-agent e, portanto, pede sua senha diretamente em seu console e não em uma janela pop-up do gnome.

Mover as chaves de volta diretamente para ~/.ssh corrige o problema, mas isso não é realmente uma boa solução, pois quebra o ssh -i ... novamente. (Eu sei, existe a opção -o ... para dizer ao ssh para usar essa única chave e resolver esse outro problema. Mas eu acho que o ssh deve testar com a chave especificada da linha de comando PRIMEIRO e isso resolveria ambos os meus problemas. ...)

Então ... quando eu executo o seguinte comando:

ssh-add -D

Ele redefine as chaves ssh-agent (1) excluindo todas as chaves atualmente existentes; e (2) reinstalar todas as chaves encontradas em ~/.ssh sem me pedir nenhuma senha (pelo menos não no momento em que executo o comando ssh-add ).

Haveria uma maneira de solicitar que ssh-add (ou qualquer outra ferramenta) também adicionasse as chaves encontradas em um diretório diferente, como meu subdiretório ~/.ssh/other_keys , sem precisar inserir todas as senhas corretamente?

    
por Alexis Wilke 01.12.2014 / 01:01

2 respostas

1

Não é uma resposta completa, mas se você procurar na página de manual de ssh-agent , tem o seguinte parágrafo.

The agent initially does not have any private keys. Keys are added using ssh-add(1). When executed without arguments, ssh-add(1) adds the files ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and ~/.ssh/identity. If the identity has a passphrase, ssh-add(1) asks for the passphrase on the terminal if it has one or from a small X11 program if running under X11. If neither of these is the case then the authentication will fail. It then sends the identity to the agent. Several identities can be stored in the agent; the agent can automatically use any of these identities. ssh-add -l displays the identities currently held by the agent.

Assim, você pode ver quais chaves estão atualmente carregadas por ssh-agent e o padrão será carregar as chaves conforme descrito por esse parágrafo.

    
por 01.12.2014 / 01:37
0

Talvez a opção AddKeysToAgent (disponível em versões recentes do OpenSSH) possa ser útil nesta situação?

Specifies whether keys should be automatically added to a running ssh-agent(1). If this option is set to yes and a key is loaded from a file, the key and its passphrase are added to the agent with the default lifetime, as if by ssh-add(1). If this option is set to ask, ssh(1) will require confirmation using the SSH_ASKPASS program before adding a key (see ssh-add(1) for details). If this option is set to confirm, each use of the key must be confirmed, as if the -c option was specified to ssh-add(1). If this option is set to no, no keys are added to the agent. The argument must be yes, confirm, ask, or no (the default).

    
por 15.11.2018 / 21:09