Usando a diretiva IdentityFile em ssh_config quando o AgentForwarding está em uso

14

É possível especificar chaves encaminhadas usando a diretiva IdentityFile em .ssh / config?

Eu encontrei este truque ao tentar implantar algum código via Capistrano / GIT em nosso servidor de produção. As minhas chaves GIT pessoais e do meu trabalho são sempre carregadas no meu agente SSH e acontece que a minha chave pessoal foi adicionada primeiro ao agente. Eu uso o encaminhamento de agentes ao implantar com o Capistrano, então quando o host tentou autenticar a operação 'git pull' ele falhou com o seguinte erro:

ERRO: permissão para 'algum repo' negado ao 'seu usuário'.

porque tentou autenticar usando minha chave git pessoal antes de tentar a chave apropriada (que veio depois no agente ssh) e assumiu que eu estava acessando um repositório estrangeiro que eu não tenho permissão para acessar. Eu posso, potencialmente, apenas dar ao meu usuário pessoal acesso a cada repositório de trabalho, mas na minha máquina local eu posso contornar este problema definindo domínios personalizados em .ssh / config da seguinte forma:

Host personal.github.com
Nome do host github.com
Usuário git
IdentityFile ~ / .ssh / some_key

Host work.github.com
Nome do host github.com
Usuário git
IdentityFile ~ / .ssh / some_other_key

e assim o git nunca fica confuso. É possível criar regras de .ssh / config para chaves encaminhadas em minhas caixas de produção para que elas sempre saibam qual chave usar ao inserir um novo código? Basicamente eu quero ser capaz de fazer:

Host work.github.com
Nome do host github.com
Usuário git
IdentityFile some_forwarded_key

Obrigado!

    
por skryl 20.04.2011 / 03:16

1 resposta

21

Você pode usar a parte pública de uma chave para especificar qual chave privada deseja usar do agente encaminhado. Isso requer a criação de um arquivo extra (a parte pública da chave) em qualquer máquina “intermediária” (máquinas para as quais você encaminha seu ssh-agent local ).

  1. Providencie para que a máquina intermediária tenha uma cópia da parte pública da chave desejada em um local conveniente (por exemplo, ~/.ssh/some_other_key.pub ).

    De qualquer máquina que já tenha a parte pública da chave:

    scp some_other_key.pub intermediate:.ssh/
    

    ou, na máquina intermediária:

    ssh-add -L | grep something_unique > ~/.ssh/some_other_key.pub
    

    Você pode editar a parte "de comentários" da chave pública para identificar melhor a origem / proprietário / propósito da chave (ou tentar ocultá-la).

  2. Use o nome do caminho para o arquivo de chave pública acima com -i ou IdentityFile .

  3. Você também pode precisar usar IdentitiesOnly yes (em .ssh/config ou -o ) para evitar que ssh tente oferecer identidades adicionais de seu agente encaminhado.

por 20.04.2011 / 07:08