Después de una actualización, los efectos secundarios pueden entrar en juego. Con OpenSSH, los valores predeterminados cambian con frecuencia. OpenBSD (que mantiene / desarrolla OpenSSH) tiene una política de OpenBSD para no preocuparse por la compatibilidad con versiones anteriores. Esto puede "romper" las cosas que, según leyeron, funcionan bien.
Hay una pista masiva: que no me di cuenta cuando esto me sucedió por primera vez (usando la interfaz GUI, y simplemente hice clic y 'estaba enojado' con 'actualización estúpida: la nueva versión está rota'. Resulta que la nueva versión no estaba roto, pero OpenBSD / OpenSSH comenzó a cambiar los valores predeterminados de intercambio de claves a partir de OpenSSH-6.7p1, consulte: http://www.openssh.com/txt/release-6.7 , notablemente:
Cambios desde OpenSSH 6.6
Cambios potencialmente incompatibles
sshd (8): el conjunto predeterminado de cifrados y MAC se ha modificado para
eliminar algoritmos inseguros. En particular, los cifrados CBC y arcfour *
están deshabilitados por defecto.
El conjunto completo de algoritmos permanece disponible si se configura
explícitamente a través de las opciones Ciphers y MAC sshd_config.
Mi problema es que tengo un cliente antiguo que no tiene ninguno de los nuevos valores predeterminados, por lo que no se puede conectar.
Dos vías de solución: arreglar / parchar el servidor o - arreglar / parchar el cliente.
Solución de servidor: recupere la configuración "antigua" para que los clientes "antiguos" puedan continuar conectándose, es decir, amigable con los clientes existentes, edite el archivo sshd_config y agregue (suficiente) los cifrados antiguos.
Las líneas clave para cambiar / agregar en sshd_config son:
ciphers aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com,aes256-cbc
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
macs hmac-sha2-256,hmac-sha2-512,hmac-sha1-96,hmac-sha1
Solo agrega:
# Ciphers
# The dafaults starting with OpenSSH 6.7 are:
# aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com
# older clients may need an older cipher, e.g.
# ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
# only adding aes256-cbc as an "old" cipher
ciphers aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com,aes256-cbc
# KEX Key Exchange algorithms
# default from openssh 6.7 are:
# curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,\
# diffie-hellman-group14-sha1
# an older kex are: none,KexAlgorithms diffie-hellman-group1-sha1
# only adding diffie-hellman-group-sha1 as an "old" KEX
# and this should be deleted ASAP as it is clearly "one of the problems" with SSL based encryption
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
# MAC message authentification code
# the new defaults are:
# umac-64-etm@openssh.com,umac-128-etm@openssh.com,
# hmac-sha2-256-etm@openssh.com,hmac-sha2-512-
# etm@openssh.com,
# umac-64@openssh.com,umac-128@openssh.com,
# hmac-sha2-256,hmac-sha2-512
# older defaults (still supported) are:
# macs hmac-sha1,hmac-md5
# consider removing hmac-sha1-96,hmac-sha1,hmac-md5 "Soon!"
macs hmac-sha2-256,hmac-sha2-512,hmac-sha1-96,hmac-sha1
Solución n. ° 2: arreglar / reemplazar el cliente
Una manera fácil de ver qué cifrados admite su cliente actual (suponiendo CLI) ssh -h
y ver si eso proporciona algo como:
Supported ciphers:
3des-cbc,aes256-cbc,aes192-cbc,aes128-cbc,blowfish-cbc,twofish-cbc,twofish256-cbc,twofish192-cbc,twofish128-cbc,des-cbc@ssh.com,cast128-cbc,rc2-cbc@ssh.com,arcfour,none
Supported MAC algorithms:
hmac-md5,hmac-md5-96,hmac-sha1,hmac-sha1-96,hmac-sha256@ssh.com,hmac-sha256-96@ssh.com,hmac-ripemd160@ssh.com,hmac-ripemd160-96@ssh.com,hmac-tiger128@ssh.com,hmac-tiger128-96@ssh.com,hmac-tiger160@ssh.com,hmac-tiger160-96@ssh.com,hmac-tiger192@ssh.com,hmac-tiger192-96@ssh.com,none
Otro comando útil es: ssh -V
ssh2: SSH Secure Shell 3.2.9 Windows Client
Product: SSH Secure Shell for Workstations
License type: none (non-commercial)
El mío era un cliente muy antiguo para mi escritorio. Mirando arriba, puede ver que no admite ninguno de los algoritmos preferidos, 15 años después, ni siquiera uno -cbr (rotativo), solo -cbc (copia en bloque).
Si su cliente no tiene una opción para proporcionar las claves, etc. compatibles (OpenSSH debería tener la opción -Q
), simplemente inicie una conexión con usted mismo, por ejemplo, ssh -v localhost
y hay líneas como esta para decirle que se sabe qué:
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-grousha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysatiu.se
...
Y lo que se encontró (y se usó):
debug2: mac_setup: found hmac-sha1
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug2: mac_setup: found hmac-sha1
debug1: kex: client->server aes128-ctr hmac-sha1 none
Extra: información de depuración de una conexión fallida - más detalles
O, lo que se intentó, pero falló.
debug: OpenSSH: Major: 7 Minor: 3 Revision: 0
debug: Ssh2Transport: All versions of OpenSSH handle kex guesses incorrectly.
debug: Ssh2Transport: Algorithm negotiation failed for c_to_s_cipher: client list: aes128-cbc,3des-cbc,twofish128-cbc,cast128-cbc,twofish-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,twofish192-cbc,twofish256-cbc,arcfour vs. server list : chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug: Ssh2Transport: Algorithm negotiation failed for s_to_c_cipher: client list: aes128-cbc,3des-cbc,twofish128-cbc,cast128-cbc,twofish-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,twofish192-cbc,twofish256-cbc,arcfour vs. server list : chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug: Ssh2Transport: lang s to c: `', lang c to s: `'
debug: Ssh2Transport: Couldn't agree on kex or hostkey alg. (chosen_kex = NULL, chosen_host_key = ssh-rsa)
debug: Ssh2Common: DISCONNECT received: Algorithm negotiation failed.
Editar: agregado 02-ene-2017
Nueva sección: ¿qué pasa con las teclas que dejan de funcionar?
En mi servidor tengo un cliente 'antiguo' y el cliente 'más reciente' instalados, y obtengo un comportamiento diferente al conectarse a un servidor. Aquí el problema no son los errores de coincidencia de cifrado, sino el uso de un par PKI arcaico , basado en DSA.
En resumen, openssh-7 (.3) ya no envía (por defecto, tal vez en absoluto) claves públicas DSA.
A continuación, comparo el resultado de dos versiones de openssh
/ usr / bin / ssh (versión anterior, lado izquierdo) y
/ opt / bin / ssh (nueva versión, lado derecho): el comando es:
${version}/ssh -v user@host date
A medida que escanea a través de la salida a continuación, espero que note que los pasos y los mensajes son generalmente los mismos. La diferencia clave viene después de la cadena SSH2_MSG_SERVICE_ACCEPT
Lo que quiero que note es que la versión anterior ofrece (y es aceptada por el servidor 'antiguo', el par de claves basado en DSA, mientras que el nuevo servidor nunca ofrece la clave basada en DSA.
Nota: la 'solución' para esto es agregar (al menos uno de) los pares PKI basados en rsa, ecdsa o ed25519.
OpenSSH_6.0p1, OpenSSL 1.0.2h 3 May 2016 | OpenSSH_7.3p1, OpenSSL 1.0.2h 3 May 2016
debug1: Reading configuration data /etc/ssh/ssh_config | debug1: Reading configuration data /var/openssh/etc/ssh_confi
debug1: Failed dlopen: /usr/krb5/lib/libkrb5.a(libkrb5.a.so): <
0509-026 System error: A file or directory in the pat <
<
debug1: Error loading Kerberos, disabling Kerberos auth. <
debug1: Connecting to x061 [192.168.129.61] port 22. debug1: Connecting to x061 [192.168.129.61] port 22.
debug1: Connection established. debug1: Connection established.
debug1: identity file /home/michael/.ssh/id_rsa type 1 debug1: identity file /home/michael/.ssh/id_rsa type 1
> debug1: key_load_public: No such file or directory
debug1: identity file /home/michael/.ssh/id_rsa-cert type -1 debug1: identity file /home/michael/.ssh/id_rsa-cert type -1
debug1: identity file /home/michael/.ssh/id_dsa type 2 debug1: identity file /home/michael/.ssh/id_dsa type 2
> debug1: key_load_public: No such file or directory
debug1: identity file /home/michael/.ssh/id_dsa-cert type -1 debug1: identity file /home/michael/.ssh/id_dsa-cert type -1
debug1: identity file /home/michael/.ssh/id_ecdsa type 3 debug1: identity file /home/michael/.ssh/id_ecdsa type 3
> debug1: key_load_public: No such file or directory
debug1: identity file /home/michael/.ssh/id_ecdsa-cert type - debug1: identity file /home/michael/.ssh/id_ecdsa-cert type -
debug1: Remote protocol version 2.0, remote software version | debug1: key_load_public: No such file or directory
debug1: match: OpenSSH_6.0 pat OpenSSH* | debug1: identity file /home/michael/.ssh/id_ed25519 type -1
> debug1: key_load_public: No such file or directory
> debug1: identity file /home/michael/.ssh/id_ed25519-cert type
debug1: Enabling compatibility mode for protocol 2.0 debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0 | debug1: Local version string SSH-2.0-OpenSSH_7.3
> debug1: Remote protocol version 2.0, remote software version
> debug1: match: OpenSSH_6.0 pat OpenSSH* compat 0x04000000
> debug1: Authenticating to x061:22 as 'padmin'
debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none | debug1: kex: algorithm: ecdh-sha2-nistp256
debug1: kex: client->server aes128-ctr hmac-md5 none | debug1: kex: host key algorithm: ssh-rsa
> debug1: kex: server->client cipher: aes128-ctr MAC: umac-64@o
> debug1: kex: client->server cipher: aes128-ctr MAC: umac-64@o
debug1: sending SSH2_MSG_KEX_ECDH_INIT debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: RSA 9f:0a:4d:a8:1b:ba:e6:d4:1a:b2:cd | debug1: Server host key: ssh-rsa SHA256:ORf5UVI7mRm/9MthM2qXM
debug1: Host 'x061' is known and matches the RSA host key. debug1: Host 'x061' is known and matches the RSA host key.
debug1: Found key in /home/michael/.ssh/known_hosts:57 debug1: Found key in /home/michael/.ssh/known_hosts:57
debug1: ssh_rsa_verify: signature correct | debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS debug1: expecting SSH2_MSG_NEWKEYS
> debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS received debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server | debug1: Skipping ssh-dss key /home/michael/.ssh/id_dsa - not
debug1: SSH2_MSG_SERVICE_REQUEST sent <
debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/michael/.ssh/id_rsa debug1: Offering RSA public key: /home/michael/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: /home/michael/.ssh/id_dsa | debug1: Offering ECDSA public key: /home/michael/.ssh/id_ecds
debug1: Server accepts key: pkalg ssh-dss blen 433 | debug1: Authentications that can continue: publickey,password
debug1: read PEM private key done: type DSA | debug1: Trying private key: /home/michael/.ssh/id_ed25519
debug1: Authentication succeeded (publickey). | debug1: Next authentication method: keyboard-interactive
Authenticated to x061 ([192.168.129.61]:22). | debug1: Authentications that can continue: publickey,password
debug1: channel 0: new [client-session] | debug1: Next authentication method: password
debug1: Requesting no-more-sessions@openssh.com | padmin@x061's password:
debug1: Entering interactive session. |