túnel ssh interrompido para desbloquear a chave - Procurando por um único comando

túnel ssh interrompido para desbloquear a chave - Procurando por um único comando

Estou tentando criar um túnel ssh para acessar um servidor remoto (A) que só pode ser acessado através de outro servidor (B). Eu tenho uma chave na minha máquina local (L) para chegar ao servidor de retransmissão (B) e outra chave no servidor de retransmissão (B) para chegar ao servidor de destino (A).

[máquina local (L) com chave para o servidor de retransmissão (B)] --> [servidor de retransmissão (B) com chave para o servidor de destino (A)] --> [servidor de destino (A)]

Eu tenho um arquivo ~/.ssh/config parecido com este na minha máquina local (L):

Host relay.server(B)
    Hostname relay.server
    Port 22
    User me
    IdentityFile ~/.ssh/id_rsa

Host destination.server(A)
    Hostname destination.server
    Port 1122
    User me
    IdentityFile ~/.ssh/id_rsa

E posso fazer meu túnel funcionar perfeitamente com o seguinte:

executando o comando: ssh -N -L 1122:SERVER_PRIVATE_IP:22 relay.server(B)na minha máquina local (L). Isso me solicita uma senha para desbloquear a primeira chave e depois parece travar, não retorna um prompt, usando a -fopção ou terminando com um &me impede de digitar a senha. No entanto, se eu usar ^Cesse comando depois de inserir a senha e, em seguida, inserir, ssh destination.server(A)recebo uma solicitação para fornecer uma senha para desbloquear a segunda chave, após a qual estou conectado ao servidor de destino (A).

Estou procurando um único comando que me permita conectar-me ao servidor de destino (A) da minha máquina local (L) e solicitará que eu forneça as senhas necessárias para desbloquear cada chave. Ou uma sugestão de uma forma alternativa de organizar as coisas para que eu possa me conectar diretamente ao servidor de destino (A) da minha máquina local (L) através do servidor de retransmissão (B).

Responder1

A resposta curta é que você precisa

  • ProxyCommandusando ncpara se conectar através
  • ForwardAgentpara passar chaves
  • garanta que sua chave pública faça parte de .ssh/authorized_keystodos os servidores
Host relay
    Hostname        relay.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ForwardAgent    yes

Host destination
    Hostname        destination.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ProxyCommand    ssh -q relay "nc %h %p"
    ForwardAgent    yes

A porção mais longa.

A ProxyCommandopção em ssh config executa um comando sempre que esse fechamento Hosté usado. É normalmente usado ncdisponível em nmap.org, também conhecido como ncate tem muitas opções.

Na Host destinationentrada acima da configuração do ssh, ProxyCommandfoi definido ssh -q relay "nc %h %p"o que diz, ssh para retransmitir silenciosamente e executar nc destination.server.fqdn.or.IP 22.

ncfaz a conexão entre o ssh de entrada e o destino.

Diz ao ForwardAgent yesssh para adicionar a chave a um agente ssh. Os agentes ssh controlam as chaves e são usados ​​para passar automaticamente a chave certa para um host, conforme necessário. O ForwardAgent yesinforma ao agente para passar a chave para outro agente na retransmissão e depois novamente para o destino.

Agora, para que tudo isso funcione, cada servidor pelo qual você passa e, finalmente, o destino deve ter a chave pública associada à sua chave privada (id_rsa) em seu .ssh/authorized_keysarquivo. Quando você criou sua chave privada, id_rsa, uma chave pública, id_rsa.pub, também deveria ter sido criada.

Se você não tiver sua chave pública, poderá obtê-la a partir da chave privada ssh-keygen -y -f ~/.ssh/id_rsapara copiar/colar facilmente. Observe que a chave pública possui 2 ou 3 campos separados por espaços, mas éumlinha.

Então, ssh relayedite ~/.ssh/authorized_keys(que pode não existir, então mkdir -p ~/.sshpode ser necessário) e cole a chave pública em uma nova linha (ou na primeira se não estiver presente).

Enquanto estiver no servidor de retransmissão, verifique se ncexiste em /bin ou /usr/bin. Caso contrário, você precisará instalá-lo usando seu gerenciador de pacotes, yum ou apt-get.

No servidor de retransmissão, ssh destinationfaça a mesma atualização do ~/.ssh/authorized_keys.

exitaté sua máquina local, e você deverá ser capaz dessh destination

Responder2

Versões mais recentes do OpenSSH ProxyJumppermitem .ssh/config:

Host relay
    Hostname        relay.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ForwardAgent    yes

Host destination
    Hostname        destination.server.fqdn.or.IP
    ProxyJump       relay
    User            me
    IdentityFile    ~/.ssh/id_rsa

informação relacionada