desarrollo-web-br-bd.com

ssh no puede negociar: no se encontró ningún método de intercambio de claves coincidente

Estoy intentando iniciar sesión en mi enrutador DSL porque tengo problemas con el correo de línea de comandos. Espero poder reconfigurar el enrutador.

Cuando doy el comando ssh, esto es lo que sucede:

$ 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

entonces miré a esta publicación de stackexchange , y modifiqué mi comando a esto, pero tengo un problema diferente, esta vez con los cifrados.

$ 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

entonces, ¿hay un comando para ofrecer 3des-cbc cifrado? No estoy seguro acerca de 3des, como si quiero agregarlo permanentemente a mi sistema.

¿Hay un comando para permitir el 3des-cbc cifrado?

¿Cuál es el problema aquí? No está pidiendo contraseña.

39
j0h

Este error particular ocurre mientras se configura el canal encriptado. Si su sistema y el sistema remoto no comparten al menos un cifrado, no hay un cifrado para acordar y no es posible un canal cifrado. Por lo general, los servidores SSH ofrecerán un pequeño puñado de cifrados diferentes para atender a diferentes clientes; No estoy seguro de por qué su servidor estaría configurado para permitir solo 3DES-CBC.

Ahora, 3DES-CBC no es terrible. Es lento y proporciona menos seguridad que algunos otros algoritmos, pero no se puede romper de inmediato siempre que las claves se seleccionen correctamente. CBC en sí tiene algunos problemas cuando el texto cifrado se puede modificar en tránsito, pero sospecho que la corrupción resultante sería rechazada por el HMAC de SSH, reduciendo el impacto. En pocas palabras, hay peores opciones que 3DES-CBC, y hay mejores opciones. Sin embargo, siempre pise con cuidado al anular los valores predeterminados relacionados con la seguridad, incluidas las opciones de algoritmo de cifrado e intercambio de claves. Esos valores predeterminados son los valores predeterminados por una razón; algunas personas bastante inteligentes gastaron algo de poder mental considerando las opciones y determinaron que lo que se eligió como predeterminado proporciona la mejor compensación general de seguridad versus rendimiento.

Como descubrió, puede usar -c ... (O -oCiphers=...) Para especificar qué cifrado ofrecer desde el lado del cliente. En este caso, agregar -c 3des-cbc Solo permite 3DES-CBC del cliente. Como esto coincide con un cifrado que ofrece el servidor, se puede establecer un canal cifrado y la conexión pasa a la fase de autenticación.

También puede agregar esto a su ~/.ssh/config Personal. Para evitar hacer un cambio global para resolver un problema local, puede colocarlo en una stanza Host. Por ejemplo, si su configuración SSH dice actualmente (ejemplo ficticio):

Port 9922

especificando un puerto predeterminado global de 9922 en lugar del puerto predeterminado 22, puede agregar una sección de Host para el Host que necesita una configuración especial, y una sección de Host global para el caso predeterminado. Eso se convertiría en algo así como ...

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

La sangría es opcional, pero creo que mejora enormemente la legibilidad. Las líneas en blanco y las líneas que comienzan con # Se ignoran.

Si siempre (o principalmente) inicia sesión como el mismo usuario en ese sistema, también puede especificar ese nombre de usuario:

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

No necesita agregar una estrofa Host * Si no había nada en su ~/.ssh/config para comenzar, ya que en ese caso solo los valores predeterminados compilados o de todo el sistema (generalmente de/etc/ssh/ssh_config) se usaría.

En este punto, la línea de comando ssh para conectarse a este Host se reduce a simplemente

$ ssh 10.255.252.1

y los demás usuarios de su sistema, y ​​las conexiones a todos los demás hosts de su sistema, no se ven afectados por los cambios.

52
a CVn

Ok, leí la página de manual y la descubrí.

No quería modificar mi archivo de configuración, así que busqué el término "cifrado" en la página del manual que me mostró el -c opción; Esto me permite especificar el tipo de cifrado. el comando final fue entonces:

ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c 3des-cbc [email protected]
30
j0h

Recientemente me encontré con este problema usando PuTTY para conectarme a una versión más nueva de Ubuntu. Parece que las versiones anteriores de PuTTY no tenían cifrados actualizados. Así que la descarga de la última versión de PuTTY solucionó el problema. Esa podría ser otra solución.

3
Trent Three

Otra respuesta para los comandos MacOSX y CLI (SFTP, por ejemplo): consulte este artículo @ http://www.openssh.com/legacy.html (Opciones de OpenSSL Legacy). Recibía un error constante de "no se pudo negociar", que se resolvió con la información de este artículo, específicamente la configuración de un parámetro de configuración en el archivo "~/.ssh/config".

Por cierto, recibí este error cuando mi servidor SFTP de destino (no bajo mi administración) finalmente apagó TLS 1.0 (opción de cifrado SSL) y requiere TLS 1.1 o 1.2.

1
Charlie L