ssh tunnel interrompido para desbloquear key - Procurando por um único comando

1

Estou tentando criar um túnel ssh para acessar um servidor remoto (A) que só pode ser acessado por 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 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 que se parece com isso 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 eu posso fazer meu túnel trabalhar 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 pede uma senha para desbloquear a primeira chave e, em seguida, parece travar não retorna um prompt, usando a opção -f ou terminando com um & me impede de digitar a senha. No entanto, se eu ^C este comando depois de digitar a senha e, em seguida, digitar ssh destination.server(A) , recebo uma solicitação para fornecer uma senha para desbloquear a segunda chave depois que estou conectado ao servidor de destino (A).

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

    
por Richard J. Acton 02.03.2018 / 17:19

1 resposta

0

A resposta curta é que você precisa

  • ProxyCommand usando nc para se conectar por meio de
  • ForwardAgent para passar as chaves
  • garanta que sua chave pública seja parte de .ssh/authorized_keys em todos 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 parte mais longa.

A opção ProxyCommand em ssh config executa um comando sempre que for usado o Host de fechamento. É normalmente usado com nc disponível no nmap.org, também conhecido como ncat e tem muitas opções.

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

nc faz a conexão entre o ssh de entrada e o destino.

O ForwardAgent yes diz ao ssh para adicionar a chave a um ssh-agent. Os agentes ssh rastreiam as chaves e são usados para passar automaticamente o caminho certo para um host, conforme necessário. O ForwardAgent yes diz ao agente para passar a chave para outro agente no relé e depois novamente para o destino.

Agora, para que tudo isso funcione, cada servidor pelo qual você passa e, por fim, o destino deve ter a chave pública associada à sua chave privada (id_rsa) em seu arquivo .ssh/authorized_keys . 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, sempre poderá obtê-la da chave privada por meio de ssh-keygen -y -f ~/.ssh/id_rsa para facilitar a cópia / colagem. Observe que a chave pública tem 2 ou 3 campos separados por espaço, mas é uma linha .

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

Enquanto estiver no servidor de retransmissão, verifique se nc existe em / bin ou / usr / bin. Se isso não acontecer, você precisará instalá-lo usando o gerenciador de pacotes, o yum ou o apt-get.

Do servidor de retransmissão, ssh destination e faça a mesma atualização de ~/.ssh/authorized_keys .

exit até a sua máquina local, e você deve ser capaz de ssh destination

    
por 19.10.2018 / 12:25