Embora seja uma pergunta simples, procurei por dias sem sucesso.
M = My machine
J = Jump Host
S = Server
Jump Host has my public key on authorized_keys.
Server has J's public key on authorized_keys.
Allowed connections (due to key authentication):
M -> J
J -> S
Como é possível fazer ssh em S da minha máquina?
Minha configuração atual é:
host jump
user root
HostName x.x.x.x
host server
user root
HostName x.x.x.x
port 22
ForwardAgent no
ProxyCommand ssh jump -W %h:%p
Não funciona porque tenta fazer login com a chave de M.
Aqui está o log ssh
debug1: Host 'x.x.x.x' is known and matches the ECDSA host key.
debug1: Found key in /Users/xxxxx/.ssh/known_hosts:1542
...
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/xxxxx/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: Trying private key: /Users/xxxxx/.ssh/id_dsa
debug1: Trying private key: /Users/xxxxx/.ssh/id_ecdsa
debug1: Trying private key: /Users/xxxxx/.ssh/id_ed25519
debug1: No more authentication methods to try.
Permission denied (publickey).
Killed by signal 1.
Responder1
O problema é que ele está tentando usar minha chave (M) para autenticar em S quando deveria usar a chave de J. Não consigo especificar a chave a ser usada com o IdentityFile, pois está em J e não na minha máquina.
Bem, esse é o seu problema. A conexão com o host de salto e com o destino final é iniciada diretamente do seu cliente nesta configuração. Seu cliente deve ter a chave correta para ambos os sistemas.
O ssh jump -W %h:%p
comando proxy inicia uma sessão ssh para seu host de salto, mas não cria um shell, apenas cria um túnel diretamente para o host de destino. Então seu cliente faz um ssh no túnel. Em nenhum momento um shell é iniciado no host de salto que permitiria acessar quaisquer chaves armazenadas nesse host intermediário neste tipo de configuração. Brincar com o encaminhamento não faz nada. Nenhum encaminhamento é usado para iniciar a conexão.
Responder2
Você não faz login no firewall, é um dispositivo de rede que restringe pacotes. É basicamente invisível neste cenário. Ele deve ser configurado para permitir que seus pacotes cheguem ao servidor bastion host (jumphost), que é a porta 22 de entrada e provavelmente as portas de saída de alto alcance.
Você faz login diretamente no servidor, portanto ele precisa ser configurado para permitir isso. Teste isso em outra máquina na mesma rede. A partir deste host bastião, você pode fazer login nas máquinas que ele está protegendo em suas sub-redes privadas.
Atualização com base em informações adicionais Você não precisa da chave do bastion/jump host no servidor de destino, você precisa da sua chave. Não é o bastião tentando acessar o servidor, é um usuário, ou seja, você.
Dê um passo para trás. Certifique-se de poder acessar o servidor de destino usando ssh de outro servidor na mesma sub-rede, usando sua chave. Em seguida, experimente no Bastion Host.