desenv-web-rp.com

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

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 comando ssh, é 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

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 o 3des-cbc cifra?

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

39
j0h

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 com a qual 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 fornece menos segurança do que alguns outros algoritmos, mas não é imediatamente quebrável, 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 suspeito fortemente que a corrupção resultante seja 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 um motivo; 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, você pode usar -c ... (ou -oCiphers=...) para especificar qual cifra oferecer do lado do cliente. Nesse caso, adicionar -c 3des-cbc permite 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 estrofe Host. Por exemplo, se sua configuração SSH diz atualmente (exemplo fictício):

Port 9922

ao especificar uma porta padrão global de 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 global de host 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 começando com # são ignorados.

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 um 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 usados.

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.

52
a CVn

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

Eu não queria modificar meu arquivo de configuração e, por isso, procurei o termo "cifra" na página de manual, que me mostrava o -c opçã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]
30
j0h

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.

3
Trent Three

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.

1
Charlie L