MÉTODO 1 (use a tecla ssh no inter)
Se você deseja manter o fluxo de autenticação
local -- authenticate --> inter -- authenticate (ask password) --> final
Isso não pode ser feito com .ssh / config proxyhost.
O que você precisa é o alias do shell bash (espero que você esteja usando o bash).
Em ~/.bashrc
, adicione a seguinte linha
alias ssh-final='ssh -t inter ssh [email protected]'
No prompt de comando, digite:
ssh-final
final
seção ~/.ssh/config
não é usada.
Detalhes da conexão (1)
ssh -t inter ssh [email protected]
pode ser visto como segue
local# ssh inter
inter# ssh [email protected]
local
está apenas "conversando" com inter
. Não há conexão ssh direta ou indireta entre local
e final
. local
está apenas exibindo a saída de ssh [email protected]
.
MÉTODO 2 (use a tecla ssh no local)
Autenticação com a mesma chave ssh
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Copiar local ~/.ssh/id_ras.pub
para
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
Detalhes da conexão (2)
tunelamento ssh
Antes de entrarmos em detalhes ProxyCommand
, vamos ver o exemplo a seguir
Etapa 1, na janela do terminal 1
local# ssh inter -L 2000:final.com:22
Etapa 2, na janela do terminal 2
local# ssh localhost -p 2000
No terminal 1, um túnel é configurado entre a porta local 2000 e a porta 22 do final.com. Tudo o que for enviado para a porta local 2000 será encaminhado para a porta 22 do final.com e vice-versa.
No terminal 2, o ssh se conecta à porta local 2000, mas na verdade está se comunicando com a porta 22 do final.com, que é o sshd.
Com o encapsulamento, o cliente ssh local na Etapa 2 é conectado diretamente ao final.com sshd.
A "saída" da porta local 2000 é o tráfego de daemon ssh "bruto".
O uso comum desse túnel é acessar o servidor Web interno ou servidor de email. A seguir, é apresentado um exemplo para servidor da web
local# ssh inter -L 2000:final.com:80
No navegador, use o seguinte URL
http://localhost:2000
Os dois pontos finais do túnel são a porta local 2000 e a porta 80 do final.com.
Tráfego que entra e sai do ponto final do túnel "COMO ESTÁ". Vamos chamar isso de tráfego "bruto".
ProxyCommand
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
A ProxyCommand
dar um passo mais longe. Ele pula a etapa de criação de uma porta local e se conecta a ela.
Um cliente ssh executará o que já foi dado por trás ProxyCommand
e tratará a saída desse comando como tráfego "bruto". Ele está segurando o ponto final local e inicie uma conexão ssh com ele.
Por que um trabalho o outro não?
O seguinte comando
ssh inter nc final.com 22
basicamente significa que (1) conecte e inter
, em seguida, (2) inter
execute o comando nc final.com 22
.
nc - arbitrary TCP and UDP connections and listens
Portanto, nc final.com 22
ele se conectará à porta 22 do final.com, imprimirá todo o tráfego recebido no stdout e enviará todo o stdin para o outro lado. É um "túnel" entre a nc stdin / out e a porta 22 do final.com.
Como nc
é executado dentro da sessão ssh, todo o seu stdout é passado de volta ao cliente ssh, como tráfego "bruto". E o cliente ssh pode passar o tráfego para o nc stdin, que terminará na porta 22 do final.com.
Através do "túnel" acima, o cliente ssh local iniciará uma sessão ssh final.com
diretamente.
O seguinte comando
ssh -t inter ssh [email protected]
não funciona ProxyCommand
porque o resultado não é um tráfego "bruto" de um daemon ssh. É o stdout de um cliente ssh . Conversar com cliente não significa negócio.
Autenticação com chave ssh diferente (configuração original do OP)
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
Copiar local ~/.ssh/id_ras.pub
para
/home/user1/.ssh/authorized_keys in `inter`
Copiar local ~/.ssh/id_ras_2.pub
para
/home/user2/.ssh/authorized_keys in `final`
Ambos os itens acima permitirão o seguinte uso
local# ssh final
Verificação Adicional
Use verbose
local# ssh -v final
Isso deve ajudar a identificar o problema ssh.
Verifique nc
ProxcyCommand
está executando nc
no inter
. Verifique se nc
está realmente disponível em inter
.
local# ssh inter
inter# nc final.com 22
Verifique se a chave rsa está configurada corretamente
Se chaves diferentes devem ser usadas para inter
e final
, os seguintes arquivos devem existir na máquina local
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
Como você inter
já pode usar o ssh , verifique a configuração das teclas final
. Da sua máquina local
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
Você deve ver o conteúdo de id_rsa_2.pub
lá.
ssh -t
, mas o que eu gostaria de fazer é simular exatamente o comportamento que tenho aossh -t
usar somente a configuração no.ssh/config
.checking
passo. Deve haver algo faltando / errado.ssh -t
, seu ssh tofinal
é iniciado a partir deinter
, que é "quase" o mesmo delocal# ssh inter
entãointer# ssh final
. A autenticação está entreinter
efinal
. Com proxy / nc, o ssh to final é iniciado a partir da sua máquina local, através de um túnel, parafinal
. A autenticação está entrelocal
efinal
.inter
a tecla ssh para se autenticarfinal
. Tente copiarid_rsa_2
paralocal
~ / .ssh / id_rsa_2 (NÃO ESCREVA SOBRE O ID_rsa local) e seu problema pode ter desaparecido.nc
incorporado. Então, em vez deProxyCommand ssh gateway nc %h %p
, você escreveriaProxyCommand ssh inter -W %h:%p
.Na verdade, não vi nenhum erro listado ou instruções ssh -v que ajudariam a ver onde ele está desligando.
Ei, cara, você está quase certo - a maneira melhor e mais segura é ter as duas chaves na máquina local. Você usaria o encaminhamento ssh-agent para conectar-se, em vez de deixar as chaves em etapas intermediárias. Você também tem a vantagem de digitar sua senha de chave apenas uma vez por logon.
Se você tem um sistema operacional moderno / amigável como o ubuntu (na sua máquina local), isso não deve funcionar sem nenhum * massageador *. Eu deixei o arquivo de identidade intencionalmente, você não precisará dele.
Seu arquivo de configuração ficaria assim:
Caso contrário, execute estas etapas para verificar se o ssh-agent está executando:
Há um bom guia explicando como isso funciona, aqui.
fonte