SSH multi-hop via arquivo de configuração

1

Eu gostaria de logar em um servidor remoto executando sth. como ssh remoteServer . O servidor remoto só pode ser alcançado através de um servidor de login (que são dois).

Existem duas rotas que eu gostaria de poder fazer (no caso de um servidor de login não poder ser usado):

  1. A B D
  2. A C D

Algumas informações:

  • A : meu computador local
  • B : servidor de login; somente permite o login do usernameB / password (sem arquivo de chave); Não consigo fazer alterações (salvar arquivo de chave, etc.)
  • C : servidor de login; permite o login do arquivo de chaves; Eu posso fazer algumas mudanças (não um superusuário embora)
  • D : servidor de destino; só pode ser alcançado a partir de B ou C; permite o login do arquivo de chaves

Estou usando um arquivo de chave privada protegido por senha (em A e C; o mesmo) que posso usar para fazer login em C e D. Aqui está o que eu quero:

  1. ssh B_D : Solicita a senha do usernameB @ B e depois a senha do arquivo de chave privada para usernameD @ D. Como não consigo salvar a chave privada em B, ela precisa ser encaminhada de alguma forma. Caso eu tenha carregado com o ssh-agent, ele não deve pedir a senha novamente.
  2. ssh C_D : Solicite a senha da chave privada uma vez e, em seguida, use-a para efetuar login no usernameC @ C e, em seguida, em usernameD @ D. Novamente, se a chave foi carregada com o ssh-agent antecipadamente, ela não deve solicitar uma senha.

Em parte, sou capaz de usar o seguinte comando para alcançar o acima (mas somente se a chave foi carregada com o ssh-agent):

ssh -A -t usernameB@B ssh usernameD@D
ssh -A -t usernameC@C ssh usernameD@D

Existe talvez uma modificação que carregue o arquivo de chave primeiro, mas apenas para esta sessão? Se eu fizer o logout, o arquivo de chaves deverá ser descarregado.

O comando acima tem dois problemas:

  1. Eu não quero carregar manualmente a chave primeiro com o ssh-agent. Isso anula o propósito de ter que digitar apenas um comando.
  2. Eu quero colocar isso ou um comando equivalente no arquivo de configuração ssh. Se existe uma maneira diferente de conseguir o que eu quero, também seria bom (desde que eu não precise modificar nada em B ou precisar de direitos de superusuário em C).

Consegui alcançar sth. semelhante usando o arquivo de configuração ssh:

Host C
    HostName addressOfC
    User usernameC
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes

Host C_D
    HostName addressD
    User usernameD
    IdentityFile ~/.ssh/id_rsa
    Port 22
    ProxyCommand ssh -A -W %h:%p C

Mais uma vez, dois problemas:

  1. Eu preciso carregar a chave com o ssh-agent primeiro. Caso contrário, solicita duas vezes a senha.
  2. Leva muito tempo (24 segundos) para se conectar. Devo mencionar aqui que estou no Windows usando o mobaXterm, no caso de este ser responsável pelos 24 segundos.

Há um problema final: o encaminhamento do agente não parece ser seguro de acordo com link . Assim, uma solução que evite encaminhar o agente seria boa.

Editar:

Após as observações do @jakuje eu modifiquei o arquivo de configuração para:

Host C
    HostName addressOfC
    User usernameC
    IdentityFile ~/.ssh/id_rsa

Host C_D
    HostName addressD
    User usernameD
    IdentityFile ~/.ssh/id_rsa
    Port 22
    ProxyCommand ssh -W %h:%p C

Executando ssh -vvv C_D i obter o seguinte log (MobaXterm 7.4):

OpenSSH_6.2p2, OpenSSL 1.0.1g 7 Apr 2014
debug1: Reading configuration data /home/mobaxterm/.ssh/config
debug1: /home/mobaxterm/.ssh/config line 24: Applying options for C_D
debug1: Reading configuration data /etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -W addressOfD:22 C
debug1: permanently_drop_suid: 1000
debug3: Incorrect RSA1 identifier
debug3: Could not load "/home/mobaxterm/.ssh/id_rsa" as a RSA1 public key
debug1: identity file /home/mobaxterm/.ssh/id_rsa type 1
debug1: identity file /home/mobaxterm/.ssh/id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5*
debug2: fd 5 setting O_NONBLOCK
debug2: fd 4 setting O_NONBLOCK
debug3: load_hostkeys: loading entries for host "addressOfD" from file "/home/mobaxterm/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /home/mobaxterm/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],ssh-rsa
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: [email protected],[email protected],ssh-rsa,[email protected],[email protected],[email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,[email protected],[email protected],aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,[email protected],[email protected],aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-md5,hmac-sha1,[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-md5,hmac-sha1,[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: [email protected],zlib,none
debug2: kex_parse_kexinit: [email protected],zlib,none
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,[email protected]
debug2: kex_parse_kexinit: none,[email protected]
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-ctr hmac-md5 [email protected]
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-ctr hmac-md5 [email protected]
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 135/256
debug2: bits set: 533/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA [...]
debug3: load_hostkeys: loading entries for host "addressOfD" from file "/home/mobaxterm/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /home/mobaxterm/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys
debug1: Host 'addressOfD' is known and matches the RSA host key.
debug1: Found key in /home/mobaxterm/.ssh/known_hosts:1
debug2: bits set: 515/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/mobaxterm/.ssh/id_rsa (0x20072e98), explicit
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-keyex,gssapi-with-mic,password
debug3: preferred hostbased,publickey,password,keyboard-interactive
debug3: authmethod_lookup publickey
debug3: remaining preferred: password,keyboard-interactive
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/mobaxterm/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp [...]
debug3: sign_and_send_pubkey: RSA [...]
debug1: Enabling compression at level 6.

Aqui, ele pausa por cerca de 22 segundos.

debug1: Authentication succeeded (publickey).
Authenticated to addressOfD (via proxy).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug2: callback start
debug2: x11_get_proto: /bin/xauth  list :0.0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 0: request x11-req confirm 1
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_status_confirm: type 99 id 0
debug2: X11 forwarding request accepted on channel 0
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0

Editar 2:

Eu tentei a configuração de configuração ssh no Ubuntu 16.04 e não obtive o atraso de 24 segundos (a conexão foi estabelecida em menos de 2 segundos). Eu baixei a versão mais recente do MobaXterm (v9.1) e apenas o primeiro estabelecimento de conexão foi lento. Eu também testei o MobaXterm no Windows 10 (antes: Windows 7), mesmo resultado. Então eu acho que isso é um problema com o Windows / MobaXterm ou o que está usando sob o capô.

Conclusão:

Parece que o melhor que posso fazer é mudar para o Linux (overkill de bits) ou encaminhar o agente ssh (se estiver com sorte) ou sentar e esperar um pouco. Em ambos os casos eu tenho que carregar a chave ssh com antecedência para evitar ter que digitar sua senha duas vezes.

    
por nx105 16.07.2016 / 12:18

1 resposta

2
  1. I need to load the key with ssh-agent first. Otherwise it prompts twice for the password.

Você não precisa disso. Se a sua chave tiver senha, é útil.

  1. It takes ages (24 seconds) to connect. I should mention here, that I'm on Windows using mobaXterm, in case this is responsible for the 24 seconds.

Conectar leva algum tempo. Se você quiser obtê-lo mais rápido (para conexões separadas, use a opção ControlMaster ).

 ProxyCommand ssh -A -W %h:%p C

Você não precisa do agente encaminhando aqui. A autenticação é sempre feita no seu computador local.

 ForwardAgent yes

Nem aqui, a menos que você queira usar suas chaves do servidor C .

    
por 16.07.2016 / 14:58

Tags