Problema: tenho entre 20 ssh-agent
e 30 identidades. A maioria dos servidores recusa a autenticação Too many failed authentications
, pois o SSH geralmente não permite que eu tente 20 chaves diferentes para fazer login.
No momento, estou especificando o arquivo de identidade para cada host manualmente, usando IdentityFile
a IdentitiesOnly
diretiva e, para que o SSH tente apenas um arquivo-chave, que funcione.
Infelizmente, isso para de funcionar assim que as chaves originais não estão mais disponíveis. ssh-add -l
mostra os caminhos corretos para cada arquivo-chave e eles correspondem aos caminhos .ssh/config
, mas não funciona. Aparentemente, o SSH seleciona a identidade pela assinatura da chave pública e não pelo nome do arquivo, o que significa que os arquivos originais precisam estar disponíveis para que o SSH possa extrair a chave pública.
Existem dois problemas com isso:
- ele pára de funcionar assim que eu desconecto a unidade flash segurando as teclas
- torna inútil o encaminhamento do agente, pois os arquivos principais não estão disponíveis no host remoto
Obviamente, eu poderia extrair as chaves públicas dos meus arquivos de identidade e armazená-las no meu computador e em todos os computadores remotos nos quais normalmente faço login. Porém, isso não parece uma solução desejável.
O que eu preciso é da possibilidade de selecionar uma identidade do ssh-agent pelo nome do arquivo, para que eu possa selecionar facilmente a chave correta usando .ssh/config
ou passando -i /path/to/original/key
, mesmo em um host remoto no qual eu SSH. Seria ainda melhor se eu pudesse "apelidar" as chaves para não precisar especificar o caminho completo.
authorized_keys
arquivo que, dependendo da chave usada, executa comandos diferentes, sem nunca permitir o acesso direto ao shell.Respostas:
Acho que vou ter que responder minha própria pergunta, pois parece não haver maneira de solicitar uma identidade pelo nome do arquivo.
Escrevi scripts Python rápidos e sujos que criam um arquivo de chave pública
.ssh/fingerprints
para todas as chaves que o agente possui. Posso então especificar esse arquivo, que não contém chave secreta, usandoIdentityFile
e o SSH selecionará a identidade correta do agente SSH. Funciona perfeitamente e permite que eu use o agente para quantas chaves privadas eu desejar.fonte
Corre
na máquina remota para gerar automaticamente todos os arquivos de chave pública (assumindo que as chaves públicas em seu
.ssh/config
nome sejam nomeadasprivateKeyFileName.pub
e que nenhum caminho inconsitente esteja envolvido). Liguechown $USER .ssh/*
para o seusudo
caso.fonte
Pegando a solução aceita e supondo que você deseja apenas reutilizar a identidade usada para obter acesso ao servidor inicial, algo como:
é suficiente.
fonte