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

32

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 sshcomando, 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é esta publicación de stackexchange y modifiqué mi comando para 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-cbccifrado?

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

j0h
fuente
1
Tal vez ya se haya respondido aquí
Eduardo Baitello, el
1
Ssh tiene varios algoritmos de cifrado diferentes que puede usar, y no hay uno común entre su cliente y el servidor. Intente usar ssh -o KexAlgorithms=diffe-hellman-group-sha1 [email protected]para obligar a su cliente a usar un algoritmo más antiguo y menos seguro, y vea si hay un firmware más reciente para su enrutador.
icarus
1
ssh -vvv ...revelará todos los protocolos de intercambio de claves y cifrado ofrecidos por el servidor.
David Foerster el

Respuestas:

47

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 inmediatamente siempre que las claves se seleccionen correctamente. El CBC en sí tiene algunos problemas cuando el texto cifrado puede modificarse en tránsito, pero sospecho firmemente 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 tenga 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-cbcsolo 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 personal ~/.ssh/config. Para evitar hacer un cambio global para resolver un problema local, puede ponerlo en una Hostestrofa. Por ejemplo, si su configuración SSH dice actualmente (ejemplo ficticio):

Port 9922

especificando un puerto predeterminado global de 9922 en lugar del 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

Para Host *empezar, no necesita agregar una estrofa si no había nada en su ~ / .ssh / config, ya que en ese caso solo se incluirían los valores predeterminados compilados o en todo el sistema (generalmente de / etc / ssh / ssh_config) usado.

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.

un CVn
fuente
En mi caso tuve que quitar la Cipherlínea, ¡pero funcionó! ¡Gracias!
carlspring
Según la página de manual de ssh_config ( enlace ), la sintaxis del archivo de configuración para los cifrados es "Cipher s " (tenga en cuenta los s finales).
MikeV
28

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

No quería modificar mi archivo de configuración, por lo que busqué el término "cifrado" en la página del manual que me mostró la -copció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]
j0h
fuente
44
Tenga cuidado al elegir el cifrado a mano, podría elegir fácilmente uno débil (er) a menos que sepa lo que está haciendo (usabilidad et al.).
heemayl
Lo mismo @heemayl. 3DES-CBC no es tan malo, pero hay cifrados admitidos al menos por versiones recientes de OpenSSH que están para todos los propósitos completamente rotos. Ve con cuidado.
un CVn
3

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.

Trent tres
fuente
1
Aunque a menudo los fabricantes no mantienen los enrutadores ni los mantienen muy bien.
Chico
0

Otra respuesta para los comandos MacOSX y CLI (SFTP, por ejemplo): consulte este artículo @ http://www.openssh.com/legacy.html (Opciones de legado de OpenSSL). 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.

Charlie L
fuente