Use uma chave específica encaminhada do SSH-agent?

23

Digamos que eu tenha uma chave para o Github, junto com outras chaves. Eu adicionei muitas chaves ao meu agente ssh ( ssh-add -L retorna muitas linhas) no meu computador de casa A. No meu .ssh/config eu configurei qual chave usar com qual host, então, por exemplo.

ssh -T -vvv [email protected] 2>&1 | grep Offering

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

Apenas uma chave é oferecida, conforme esperado. Mas então ssh-ing para algum host B com ForwardAgent yes e repetindo o mesmo comando, recebo

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.linode2
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.helium
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

significa que tenta todas as minhas chaves. Isso é problemático, pois somente um número limitado de chaves pode ser tentado antes que os servidores retornem Too many authentication failures . Então eu tentei editar .ssh/config no host B para incluir

Host github.com
  IdentityFile /Users/doxna/.ssh/id_rsa.github
  IdentitiesOnly yes

mas eu não recebo nenhuma oferta importante, mas sim

debug2: key: /Users/doxna/.ssh/id_rsa.github ((nil))

que eu acho que significa que a chave não foi encontrada (?) E depois de tudo, a chave está localizada no meu computador de casa A, não o host B, então a questão é como se referir a ele no host B? Espero ter conseguido explicar a pergunta.

    
por danmichaelo 29.05.2014 / 23:38

2 respostas

21

Você teve a ideia certa. A única parte que está faltando é que o arquivo apontado por IdentityFile deve existir. Ele não precisa conter uma chave privada, basta ter a chave pública disponível.

No host B, você pode extrair a chave pública do agente digitando ssh-add -L | grep /Users/doxna/.ssh/id_rsa.github > ~/.ssh/id_rsa.github.pub e, em seguida, apontar para esse arquivo em ~/.ssh/config

    
por 30.05.2014 / 00:11
5

Resposta legal do @Kasperd, mas observe também que, se o Host B estiver comprometido, ou se você não confiar em todos aqueles com privilégios de root, então você ainda estará expondo todas as suas chaves ao abuso por tanto tempo quanto você está logado no host.

Portanto, uma abordagem melhor pode ser encaminhar apenas as chaves de que você precisa. Talvez tente ssh-agent-filter , que está nos repositórios do Debian / Ubuntu, ou do github .

EDIT: Eu decidi sobre ssh-ident em vez de ssh-agent-filter para encaminhar chaves seletivamente, embora não seja uma experiência tão tranquila quanto se poderia esperar.

    
por 12.05.2016 / 17:47