ssh incapaz de negociar - nenhum método de troca de chave correspondente encontrado

32

Estou tentando fazer login no meu roteador DSL, porque estou tendo problemas com o correio da linha de comando. Espero poder reconfigurar o roteador.

Quando eu dou o sshcomando, é isso que acontece:

$ ssh [email protected]

Unable to negotiate with 10.255.252.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

então olhei para este post de stackexchange e modifiquei meu comando para isso, mas tenho um problema diferente, desta vez com as cifras.

$ ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 [email protected]

Unable to negotiate with 10.255.252.1 port 22: no matching cipher found. Their offer: 3des-cbc

então existe um comando para oferecer 3des-cbc criptografia? Não tenho certeza sobre o 3des, como se quero adicioná-lo permanentemente ao meu sistema.

Existe um comando para permitir a 3des-cbccifra?

Qual é o problema aqui? Não está pedindo senha.

j0h
fonte
11
Talvez já esteja aqui
Eduardo Baitello
11
O Ssh possui vários algoritmos de criptografia diferentes que podem ser usados ​​e não existe um comum entre o seu cliente e o servidor. Tente ssh -o KexAlgorithms=diffe-hellman-group-sha1 [email protected]forçar o seu cliente a usar um algoritmo mais antigo e menos seguro e verifique se há firmware mais recente para o seu roteador.
icarus
11
ssh -vvv ...revelará todos os protocolos de troca de chaves e criptografia oferecidos pelo servidor.
David Foerster

Respostas:

47

Esse erro específico ocorre enquanto o canal criptografado está sendo configurado. Se o seu sistema e o sistema remoto não compartilham pelo menos uma cifra, não há uma cifra para concordar e nenhum canal criptografado é possível. Geralmente, os servidores SSH oferecem um pequeno punhado de cifras diferentes para atender a diferentes clientes; Não sei por que seu servidor seria configurado para permitir apenas 3DES-CBC.

Agora, o 3DES-CBC não é terrível. É lento e oferece menos segurança do que alguns outros algoritmos, mas não pode ser quebrado imediatamente, desde que as chaves sejam selecionadas corretamente. A própria CBC tem alguns problemas quando o texto cifrado pode ser modificado em trânsito, mas eu suspeito fortemente que a corrupção resultante seria rejeitada pelo HMAC do SSH, reduzindo o impacto. Bottom line, existem escolhas piores do que 3DES-CBC, e existem melhores. No entanto, sempre tome cuidado ao substituir os padrões relacionados à segurança, incluindo opções de algoritmos de troca de cifras e chaves.Esses padrões são os padrões por uma razão; algumas pessoas bastante inteligentes gastaram algum poder cerebral considerando as opções e determinaram que o que foi escolhido como padrão fornece a melhor troca geral de segurança versus desempenho.

Como você descobriu, pode usar -c ...(ou -oCiphers=...) para especificar qual cifra oferecer do lado do cliente. Nesse caso, a adição -c 3des-cbcpermite apenas 3DES-CBC do cliente. Como isso corresponde à cifra que o servidor oferece, um canal criptografado pode ser estabelecido e a conexão continua com a fase de autenticação.

Você também pode adicionar isso ao seu pessoal ~/.ssh/config. Para evitar fazer uma alteração global para resolver um problema local, você pode colocá-lo em uma Hostestrofe. Por exemplo, se sua configuração SSH diz atualmente (exemplo fictício):

Port 9922

Ao especificar uma porta padrão global 9922 em vez da padrão 22, você pode adicionar uma estrofe de host para o host que precisa de configuração especial e uma estrofe de host global para o caso padrão. Isso se tornaria algo como ...

Host 10.255.252.1
    Ciphers 3des-cbc
    KexAlgorithms +diffie-hellman-group1-sha1
Host *
    Port 9922

O recuo é opcional, mas acho que melhora muito a legibilidade. Linhas em branco e linhas iniciadas com #são ignoradas.

Se você sempre (ou principalmente) efetua login como o mesmo usuário nesse sistema, também pode especificar esse nome de usuário:

Host 10.255.252.1
    Ciphers 3des-cbc
    KexAlgorithms +diffie-hellman-group1-sha1
    User enduser
Host *
    Port 9922

Você não precisa adicionar uma Host *estrofe se não houvesse nada em seu ~ / .ssh / config, pois nesse caso apenas os padrões compilados ou em todo o sistema (normalmente de / etc / ssh / ssh_config) seriam usava.

Nesse ponto, a linha de comando ssh para conectar-se a este host reduz para simplesmente

$ ssh 10.255.252.1

e todos os outros usuários do seu sistema e as conexões com todos os outros hosts do seu sistema não são afetados pelas alterações.

um CVn
fonte
No meu caso, tive que remover a Cipherlinha, mas funcionou! Obrigado!
carlspring 31/05/19
De acordo com a página de manual ssh_config ( link ), a sintaxe do arquivo de configuração para as cifras é "Cipher s " (observe os seguintes).
MikeV 8/07
28

Ok, eu li a página de manual e descobri.

Eu não queria modificar meu arquivo de configuração e, portanto, procurei o termo "cifra" na página do manual, que me mostrou a -copção; isso me permite especificar o tipo de criptografia. o comando final foi então:

ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c 3des-cbc [email protected]
j0h
fonte
4
Tenha cuidado ao escolher a cifra manualmente, pois você pode facilmente escolher uma mais fraca, a menos que saiba o que está fazendo (usabilidade et al.).
heemayl
Ditto @heemayl. O 3DES-CBC não é tão ruim, mas há cifras suportadas pelo menos pelas versões recentes do OpenSSH que são completamente quebradas para todos os efeitos. Pisar com cuidado.
um CVn
3

Recentemente, tive esse problema usando o PuTTY para conectar-se a uma versão mais recente do Ubuntu. Parece que as versões anteriores do PuTTY não tinham cifras atualizadas. Portanto, o download da versão mais recente do PuTTY corrigiu o problema. Essa poderia ser outra solução.

Trent Three
fonte
11
Embora muitas vezes os roteadores não sejam atualizados ou suportados muito bem pelos fabricantes.
Guy
0

Outra resposta para os comandos do MacOSX e da CLI (SFTP, por exemplo): consulte este artigo @ http://www.openssh.com/legacy.html (Opções de legado do OpenSSL). Eu estava recebendo um erro consistente de "não foi possível negociar", resolvido pelas informações deste artigo, especificamente a configuração de um parâmetro de configuração no arquivo "~ / .ssh / config".

BTW, recebi esse erro quando meu servidor SFTP de destino (não sob minha administração) finalmente desativou o TLS 1.0 (opção de criptografia SSL) e requer o TLS 1.1 ou 1.2.

Charlie L
fonte