Configurando o túnel ssh através de múltiplos hosts e com diferentes usuários

1

Eu tenho as seguintes conexões ssh:

    user1@local --> root@machine1 --> root@machine2 --> abc@machine3

Eu preciso conectar do local diretamente ao computador3:

    [user1@local]$ ssh abc@machine3

Neste ponto, estou bem se precisar inserir senhas, embora idealmente eu gostaria de usar chaves ssh e sem conexões de senha.

Consigo conectar a machine1 e machine2 com sudo, mas a conexão com machine3 falha:

[user1@local]$ sudo ssh abc@machine3
[email protected]'s password:
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

Meu arquivo /root/.ssh/config contém o seguinte:

    Host machine1
        HostName machine1.com
        User root
        IdentitiesOnly yes

    Host machine2
        HostName machine2.com
        User root
        ProxyCommand ssh -W %h:%p machine1
        IdentitiesOnly yes

    Host machine3
        HostName machine3.com
        User abc
        ProxyCommand ssh -W %h:%p machine2
        IdentitiesOnly yes

Estou no OpenSSH_5.3p1 na máquina local, portanto, não posso usar o ProxyJump. Também não há suporte a netcat nas máquinas 1,2 e 3.

Quando eu ssh manualmente, eu só posso ssh para machine3 de machine2 como usuário abc e, em seguida, não há senha necessária (authorized_keys em machine3 contém chave pública de machine2). Conectar manualmente como qualquer outro usuário ao machine3 a partir de machine2 resulta no mesmo erro Permission denied como acima.

Alguma idéia de como conseguir a conexão ssh desejada da máquina local? Isso é factível? Uma vez que o túnel está configurado, eu preciso criar alguns arquivos na máquina3 e reiniciar os serviços lá - tudo a partir do script.

EDITAR

Eu tentei ssh com verbose e consegui isto:

    [user1@local]$ sudo ssh -v abc@machine3
    OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
    debug1: Reading configuration data /root/.ssh/config
    debug1: Applying options for machine3
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: Applying options for *
    debug1: Executing proxy command: exec ssh -W machine3.com:22 machine2
    debug1: permanently_drop_suid: 0
    debug1: permanently_set_uid: 0/0
    debug1: identity file /root/.ssh/identity type -1
    debug1: identity file /root/.ssh/identity-cert type -1
    debug1: identity file /root/.ssh/id_rsa type -1
    debug1: identity file /root/.ssh/id_rsa-cert type -1
    debug1: identity file /root/.ssh/id_dsa type -1
    debug1: identity file /root/.ssh/id_dsa-cert type -1
    debug1: identity file /root/.ssh/id_ecdsa type -1
    debug1: identity file /root/.ssh/id_ecdsa-cert type -1
    [email protected]'s password:
    [email protected]'s password:
    debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
    debug1: match: OpenSSH_5.3 pat OpenSSH*
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH_5.3
    debug1: SSH2_MSG_KEXINIT sent
    debug1: SSH2_MSG_KEXINIT received
    debug1: kex: server->client aes128-ctr hmac-md5 none
    debug1: kex: client->server aes128-ctr hmac-md5 none
    debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
    debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
    debug1: Host 'machine3.com' is known and matches the RSA host key.
    debug1: Found key in /root/.ssh/known_hosts:4
    debug1: ssh_rsa_verify: signature correct
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug1: SSH2_MSG_NEWKEYS received
    debug1: SSH2_MSG_SERVICE_REQUEST sent
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
    debug1: Next authentication method: publickey
    debug1: Trying private key: /root/.ssh/identity
    debug1: Trying private key: /root/.ssh/id_rsa
    debug1: Trying private key: /root/.ssh/id_dsa
    debug1: Trying private key: /root/.ssh/id_ecdsa
    debug1: No more authentication methods to try.
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

O único arquivo que existe no diretório .ssh em machine3 é o authorized_keys.

    
por Lidia 23.08.2017 / 21:53

2 respostas

0

Depois de estudar uma resposta existente em outra, relacionada pergunta Eu fiz o seguinte e resolvi meu problema:

  1. Chaves privada e pública copiadas de machine1 e machine2 para local, com nomes diferentes: /root/.ssh/id_rsa_machine1, /root/.ssh/id_rsa_machine1.pub e /root/.ssh/id_rsa_machine2, /root/.ssh /id_rsa_machine2.pub.
  2. Chaves ssh geradas no sistema local.
  3. Adicionado chave pública do sistema local para authorized_keys na máquina3.
  4. Adicionada chave pública de local para machine1.
  5. Adicionada chave pública de machine1 para machine2 (machine3 já tinha chave pública de machine2 em authorized_keys).
  6. Modificado o arquivo /root/.ssh/config no local, da seguinte forma:

    Host machine1
        HostName machine1.com
        User root
        IdentityFile /root/.ssh/id_rsa_machine1
        Port 22
        IdentitiesOnly yes
    
    Host machine2
        HostName machine2.com
        User root
        IdentityFile /root/.ssh/id_rsa_machine2
        Port 22
        ProxyCommand ssh -W %h:%p machine1
        IdentitiesOnly yes
        ForwardAgent yes
    
    
    Host machine3
        HostName machine3.com
        User abc
        ProxyCommand ssh -W %h:%p machine2
        IdentitiesOnly yes
        ForwardAgent yes
    

Os arquivos de identidade referenciados precisam existir na máquina local. Eu agora posso ssh diretamente com sudo de local para machine3 sem prompts de senha! : -)

Fiz alterações adicionais para user1 no local para ssh como user1 para machine3 diretamente sem prompts de senha:

  1. Copie chaves privadas e públicas da máquina1 e da máquina2 para o diretório user1 .ssh na máquina local, com os seguintes nomes: ~ / .ssh / id_rsa_machine1, ~ / .ssh / id_rsa_machine1.pub e ~ / .ssh / id_rsa_machine2, ~ /.ssh/id_rsa_machine2.pub.
  2. Adicionada chave pública para o usuário1 no sistema local para authorized_keys na máquina3.

Adicionado o seguinte ao arquivo user1 ~ / .ssh / config:

    Host machine1
        HostName machine1.com
        User root
        IdentityFile ~/.ssh/id_rsa_machine1
        Port 22
        IdentitiesOnly yes

    Host machine2
        HostName machine2.com
        User root
        IdentityFile ~/.ssh/id_rsa_machine2
        Port 22
        ProxyCommand ssh -W %h:%p machine1
        IdentitiesOnly yes
        ForwardAgent yes


    Host machine3
        HostName machine3.com
        User abc
        ProxyCommand ssh -W %h:%p machine2
        IdentitiesOnly yes
        ForwardAgent yes
    
por 23.08.2017 / 23:10
2

O fato de você poder fazer ssh de machine2 para machine3 significa que há uma chave privada em machine2 que pode autenticar você contra machine3.

Você pode copiar essa chave privada na máquina local e especificar seu caminho no seu ~/.ssh/config :

Host machine3  
  IdentityFile /path/to/the/key 
    
por 23.08.2017 / 23:02