
Preciso usar duas chaves ssh diferentes ao me conectar ao mesmo host.
A máquina que preciso usar para conectar (devido a restrições de endereço IP) não é a máquina onde as chaves ssh estão armazenadas, então estou usando o ssh-agent aqui. Além disso, essas conexões ssh acontecem sob o controle de um script que é executado na máquina intermediária.
Se as chaves ssh fossem locais para essa máquina, imagino que poderia usar ssh -i (ou talvez ssh-add em um agente aninhado) para especificar a identidade que desejo usar e poderia atualizar os scripts e/ou o contexto do script para faça a coisa certa para o meu caso (provavelmente com um arquivo de configuração para especificar os detalhes relevantes).
Mas, como as chaves não estão na máquina que executa a conexão ssh, ssh -i falha (o arquivo de chave privada não existe nessa máquina). E, da mesma forma, ssh-add quer que eu especifique a chave fornecendo o nome do arquivo da chave privada. (Ou suspeito que seja esse o caso - na verdade não descobri como aninhar agentes ssh, mas a documentação sobre ssh-add duvida que essa seria uma abordagem plausível.)
Então, minha pergunta é: como faço para que o ssh use apenas a chave que eu especifico ao fazer contato com o sistema de destino?
[Outras pessoas também precisam usar esses scripts, é claro, mas esse é um problema que posso resolver depois de fazê-lo funcionar sozinho.]
Em outras palavras, tenho esta situação:
$ ssh-add -l
2048 SHA256:A8PFww3boSTRe8sPvXDgir09KNVqu+JvWNw7/GLCiwM /home/account/.ssh/key1.pem (RSA)
2048 SHA256:Em5p4B++GIm0l/zDYgZ26VaHbIb07T6MViu5ioMPTiA /home/account/.ssh/key2_rsa (RSA)
4096 SHA256:JON2JaTTk1r3ufUrGm4C/cE9IG9edyfDxE1zTel/0u8 /home/account/.ssh/key3_rsa (RSA)
E em um contexto eu preciso do ssh para usar o key2_rsa e no outro contexto eu preciso do ssh para usar o key3_rsa
Usar a chave errada aqui causa falha na conexão com o sistema de destino (porque reconhece a outra chave como tendo acesso à máquina, mas não tendo acesso a esse subsistema).
Como faço para que isso funcione?
Responder1
ssh -i
também aceita arquivos contendopúblicochaves, e se uma chave correspondente for encontrada no agente, ela será tentada antes de tudo.
Além disso, se -o IdentitiesOnly=yes
for especificado, o cliente usaráapenasessa chave e não recorrerá a nenhuma outra chave se ela for rejeitada. (Observe que o recurso a outrosmecanismos, como GSSAPI ou senha, é controlado por uma opção diferente.)