Especificar o SSH KexAlgorithms funciona na CLI, mas não via ssh_config [duplicate]

1

Por padrão, meu cliente SSH não permite o uso do algoritmo de troca de chaves diffie-hellman-group-exchange-sha256 . No entanto, preciso acessar um servidor no 10.0.0.1 que requer o uso desse algoritmo.

Isso funciona bem na linha de comando:

$ ssh -o KexAlgorithms=diffie-hellman-group-exchange-sha256 [email protected]
Password:

No entanto, falha se eu tentar contar com a seguinte adição no final de /etc/ssh/ssh_config :

Host 10.0.0.1
    KexAlgorithms diffie-hellman-group-exchange-sha256

Aqui está a saída relevante:

$ ssh -vvv [email protected]
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug3: kex names ok: [[email protected]]
...
debug1: /etc/ssh/ssh_config line 72: Applying options for 10.0.0.1
debug3: kex names ok: [diffie-hellman-group-exchange-sha256]
...
debug1: Connecting to 10.0.0.1 [10.0.0.1] port 22.
debug1: Connection established.
...
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: [email protected]
...
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256
...
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: mac_setup: setup hmac-ripemd160
debug1: kex: server->client aes256-ctr hmac-ripemd160 none
debug2: mac_setup: setup hmac-ripemd160
debug1: kex: client->server aes256-ctr hmac-ripemd160 none
Unable to negotiate a key exchange method

O que eu acho intrigante sobre isso é que o SSH está claramente lendo a linha relevante em /etc/ssh/ssh_config e parece estar feliz com isso. Mas, em seguida, ele tenta negociar uma troca de chaves com o servidor usando [email protected] em vez de diffie-hellman-group-exchange-sha256 , o que obviamente falha.

Por que isso acontece e como posso corrigi-lo?

    
por sampablokuper 04.04.2016 / 22:26

1 resposta

1

As opções do OpenSSH podem se comportar de alguma forma estranhas à primeira vista. Mas a página de manual para ssh_config documenta bem:

For each parameter, the first obtained value will be used. The configuration files contain sections separated by “Host” specifications, and that section is only applied for hosts that match one of the patterns given in the specification. The matched host name is usually the one given on the command line (see the CanonicalizeHostname option for exceptions.)

Você pode reescrever sua configuração dessa forma para obter o que precisa (a correspondência da estrela * deve ser a última):

Host 10.0.0.1
    KexAlgorithms diffie-hellman-group-exchange-sha256
#[...]
Host *
    KexAlgorithms [email protected]

Da minha resposta duplicada

E para explicar por que a opção de linha de comando funciona, também na mesma página de manual para ssh_config :

  1. command-line options
  2. user's configuration file (~/.ssh/config)
  3. system-wide configuration file (/etc/ssh/ssh_config)
    
por 04.04.2016 / 22:46

Tags