Estou procurando uma maneira simples de SSH da minha máquina local, A, através de um proxy B, para um host de destino C. A chave privada que acompanha a chave pública em C está em B e não posso coloque essa chave na minha máquina local. Alguma dica?
Além disso, eu gostaria de poder fazer isso usando ~ / .ssh / config.
Obrigado!
Respostas:
Esquema:
Condições prévias:
A
está executando o ssh-agent;A
pode acessarB
;B
pode acessarC
;A
A chave pública ssh está presente emB:~/.ssh/authorized_keys
B
A chave pública ssh está presente emC:~/.ssh/authorized_keys
Na
~/.ssh/config
onA
, adicioneSe sua chave privada ssh em B estiver em um local não padrão, adicione seu caminho depois
ssh-add
.Agora você deve ser capaz de acessar
C
a partir deA
:fonte
ProxyJump B
. fonte: wikibooksnc
?ForwardAgent yes
antes doProxyJump
comando.Verifique se o seguinte está funcionando.
Use o comando a seguir se desejar usar a chave armazenada em B.
Aqui estamos especificando o comando, ou seja,
ssh -i /path/to/identity_on_B C
para ser executado em B em vez de um shell de login.fonte
Eu já resolvi isso agora. Aqui está a solução, que é bastante direta. Eu deveria ter visto isso antes:
~ / .ssh / config:
'B' é o servidor Proxy que você está acessando. Ele deve ser configurado como você normalmente configuraria o acesso a um servidor.
'C' é o host de destino. Ele precisa ser configurado para usar 'B' no processo de conexão. O arquivo de identidade em 'C' é o caminho para a chave ssh em 'B'. O ProxyCommand usa o Netcat para abrir a conexão com 'C' a partir de 'B'. O Netcat, ou nc, precisará ser instalado no 'B'.
Espero que isso ajude os outros.
fonte
Escrevi um script simples para listar basicamente minhas chaves ssh na instância remota e depois adicionar a que selecionei ao meu agente ssh local. Isso não é muito limpo, mas me permite manter todas as chaves em um local remoto e não localmente.
Aqui está o script, se alguém estiver interessado:
fonte
fonte
Façam:
ssh someuser@IP_D
de tal modo que
A -> B-> C -> D
onde A é o host em que você está,edite seu ~ / .ssh / config local da seguinte maneira:
Esta resposta é baseada na resposta escolhida. Eu tive que descobrir como vários usuários se encaixam em todo o cenário.
Isso funciona para mim. HTH.
fonte
A resposta de Snowball ajudou muito. No entanto, fiz algumas modificações no comando e quis explicar como ele funciona. Dada esta situação:
Modifique seu
~/.ssh/config
arquivo e adicione o hostB
pelo qual deseja pular, exatamente como você configuraria normalmente um host:Em seguida, você adiciona o host no
C
qual deseja terminar:Observe o
ProxyCommand
, onde:ssh -T -q
indica que não deve alocar um pseudo-TTY (-T
) e ficar quieto (-q
);B
, adicionamos a chave às chaves SSH deA
throughssh-add
;-o 'ForwardAgent yes'
.ssh-add -t 1
indica que eu quero que a chave seja adicionada apenas por 1 segundo necessário para autenticar no host final C;nc %h %p
inicia umanetcat
conexão com o host final%h
na porta%p
(ambos os quais serão preenchidos pelo SSH com base nas informações no~/.ssh/config
arquivo).Se você precisar especificar uma chave personalizada
B
para usar, poderá fazer isso modificando assh-add
peça:fonte