Você precisa:
IdentityFile ~/.ssh/id_bastion
AddKeysToAgent yes
ForwardAgent yes
Verifique man ssh_config | less +/AddKeysToAgent
Eu trabalho em um ambiente onde eu tenho várias chaves ssh para múltiplos ambientes, que utilizam um host bastion, significando ssh para qualquer caixa em qualquer ambiente, é um hop de 2 passos, primeiro para o bastião, e o segundo para a caixa de destino, e minha identidade ssh tem que ser levada comigo o caminho todo.
Eu sei que tanto o ssh quanto o .ssh / config tem opções para encaminhar todas as suas identidades ssh atuais para o host bastion, de forma que você possa reutilizá-las lá:
ssh -A IPADDRESS
e ForwardAgent
Além disso, eu sei que o .ssh / config tem a opção IdentityFile
que me permite especificar qual chave ssh é usada, dependendo do host ao qual estou tentando me conectar. No entanto, o que tenho notado é que quaisquer identidades usadas pela opção IdentityFile não são encaminhadas pelo ForwardAgent
- eu faço isso para o host de bastiões, mas sem minha chave e não consigo ssh para a próxima caixa.
A única maneira de conseguir isso até agora é adicionar manualmente a identidade que preciso usar com ssh-add ~/.ssh/id_rsa[1-10]
e, em seguida, para ssh usando ForwardAgent
ou ssh -A
. No entanto, isso pode ser uma dor quando eu tenho muitas identidades que eu preciso alternar entre.
Existe uma maneira que eu possa realizar tudo isso usando apenas o arquivo de configuração ssh?
Você precisa:
IdentityFile ~/.ssh/id_bastion
AddKeysToAgent yes
ForwardAgent yes
Verifique man ssh_config | less +/AddKeysToAgent
Você já tentou usar um ProxyCommand? Digamos que você queira se conectar como [email protected] seguindo de forma transparente a conta [email protected]. A seguinte configuração atinge apenas isso:
Host bastion.host
User user1
IdentityFile ~/.ssh/id_bastion
Host remote.host
User user2
IdentityFile ~/.ssh/id_remote
ProxyCommand ssh bastion.host -W %h:%p
Outra boa propriedade dessa configuração é permitir que outros comandos (como git, sshfs, rsync, ...) se conectem ao remote.host "diretamente" através do host bastion, usando as mesmas credenciais.
edit: Na sua configuração, cada host compartilha o mesmo bastião, de modo que você pode incluir o ProxyCommand em um host curinga antes de adicionar os mais específicos:
Host remote.*
ProxyCommand ssh bastion.host -W %h:%p
Host remote.host1
IdentityFile ...
Host remote.host2
....
Uma maneira mais simples de fazer o ProxyCommand
acima é usar ProxyJump
; sua configuração SSH será algo como isto:
Host bastion.host
User user1
IdentityFile ~/.ssh/id_bastion
Host remote.host
User user2
IdentityFile ~/.ssh/id_remote
ProxyJump bastion.host
Tags ssh bash linux shell ssh-config