¿Cómo puedo forzar a SSH a dar una clave RSA en lugar de ECDSA?


16

La primera vez que accedo a un servidor, ¿cómo puedo forzar a SSH a que me dé la clave RSA y la almacene automáticamente si el usuario lo aprueba?

Actualmente me está ofreciendo la clave ECDSA. Como ya conozco la clave RSA, preferiría ver la clave RSA presentada en este momento.

Yo he tratado:

ssh -o RSAAuthentication=yes user@server

Lamentablemente, esto me da una clave ECDSA y el Are you sure you want to continue connecting (yes/no)?mensaje.


Tengo una situación similar. Servidor A. Cliente B. En B: ssh A primero le pedirá la clave. En Cleint C: ssh A primero le pedirá una contraseña, después de un intento fallido de que el Cliente C use la clave ECDSA, vi esto en el registro de A. Si precargo la clave rsa en C, entonces ssh A se conectará felizmente . ¿Cómo evito que C use la clave ECDSA como primer intento?
Kemin Zhou

Respuestas:


14

Al eliminar los algoritmos ECDSA de la HostKeyAlgorithmsvariable de configuración.

ssh -o HostKeyAlgorithms=ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss user@server

Simplemente eliminé todos los algoritmos ECDSA de la lista predeterminada .

Puede, por supuesto, poner eso en su .ssh/configmáquina:

Host: server
    HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss

Para OpenSSL, 1) no hay dos puntos después del host, y 2) la lista predeterminada parece haber cambiado desde que publicó esto. Intenta en su HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-rsalugar.
Cowlinator

6

No use RSA ya que ECDSA es el nuevo valor predeterminado.

En el servidor haga esto: ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub y registre ese número.

En el cliente, puede enviar SSH al host y, si ve ese mismo número, puede responder el mensaje Are you sure you want to continue connecting (yes/no)?afirmativamente. Luego, la clave ECDSA se grabará en el cliente para uso futuro.


3
sí, pero ¿qué tal si tengo una aplicación antigua que necesita RSA para mantener la compatibilidad hasta que haya una decisión comercial de actualizar a ecdsa?
enthusiasticgeek

@RobertSiemer solo el póster original de la pregunta puede cambiar la respuesta aceptada. No puedo hacerlo.
enthusiasticgeek

1
H2ONaCl: cambie su respuesta aceptada. Este no hace lo que pediste. @enthusiasticgeek lo siento, confusión.
Robert Siemer

Por defecto (apelación a la autoridad) y nuevo (apelación a la novedad) no necesariamente significa mejor. RSA todavía se considera fuerte ... solo sube los bits a 4096 si quieres más fuerza (2048 podría ser obsoleto pronto). Y si quieres un buen EC algo, usa ed25519. ECDSA es una mierda porque usa curvas NIST débiles que posiblemente incluso están retrocedidas; Este ha sido un problema bien conocido por un tiempo. Entonces, para el soporte heredado, habilite RSA, y para un algo ideal, use ed25519 ... siempre deshabilite DSA que es obsoleto por mucho tiempo (una razón importante es la clave de 1024 bits de tamaño fijo) y también deshabilite ECDSA. Prueba ssh-audit para más.
Peter

5

Sí, OK, cambie a ECDSA pronto, pero mientras tanto intente esto:

ssh -o HostKeyAlgorithms=ssh-rsa -o FingerprintHash=md5 user@example.com

Esto proporciona "Opción de configuración incorrecta: fingerprinthash" en mi sistema (OpenSSH_6.6.1p1).
Soren Bjornstad

1
@SorenBjornstad, la FingerprintHashopción es innecesaria, solo deja esa parte completa.
Lucas

2

Acabo de agregar esta línea

HostKeyAlgorithms ssh-rsa

a

/etc/ssh/sshd_conf

y está funcionando bien en esta versión.

OpenSSH_7.7p2 ubuntu-4ubuntu2.2

1

Solo para mejorar la respuesta de tumbleweed, que tiene un enlace muerto para encontrar la antigua lista de algoritmos.

Primero decida sobre una lista de algoritmos. Para encontrar la lista anterior, use ssh -vv:

ssh -vv somehost

Y busque las 2 líneas como "algoritmos de clave de host: ..." donde la primera parece ser la oferta del servidor y la segunda es la del cliente. O para seleccionar esas 2 líneas automáticamente, intente esto (y para salir presione ctrl + d):

ssh -vv somehost 2>&1 | grep "host key algorithms:"

Ahora filtre hacia abajo ... debe eliminar todos los dss / dsa, ya que son obsoletos desde hace mucho tiempo, y también desea eliminar ecdsa (como lo hago yo), por ejemplo, si tenía:

ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Deberías terminar con:

ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Ahora edite su configuración. Para su propia configuración:

vim ~/.ssh/config

Para la configuración de todo el sistema:

sudo vim /etc/ssh/ssh_config

Agregue una nueva línea, ya sea globalmente:

HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

o para un host específico (no es ideal para la configuración de todo el servidor):

Host somehost
    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

En lugar de la lista que ssh -vvingresé , pegue la lista que obtuvo del resultado, sin incluir la parte "algoritmos de clave de host:".


0

algunos puntos son confusos en cuanto a si es posible eliminar los algoritmos clave de los valores predeterminados existentes: las claves de nivel más alto son las nuevas claves RSA-sha2 / 256/512 y ed25519 para la mejor seguridad utilizando ssh-keygen -t ras -a -b 4096 -a 113 a gen. Aparentemente, el soporte heredado está leyendo noticias ssh de que ssh1 habrá desaparecido por completo: también se eliminarán sus claves dsa de 45 bits y 96 bits máx. También depreciadas. Se corrigió en 128/1024 bit max encontrado pirateable. (Posiblemente, la NSA hizo eso y cojo / excusa, ya que el código de depuración dejaba una gran duda de que nombrarlo era insoportable), por lo que todas las estructuras clave de RSA seguras y de alto costo tienen que ser modificadas para soportar y mantener estándares más altos en el futuro. establezca qué teclas desea usar como se describe en / etc / ssh / sshd_config, intente hacer 2 teclas auth 3 tecla también funciona, es decir: sshd_config "AuthenticationMethods publickey, publickey, publickey" - asegúrese de que las listas ssh -Q kex coincidan con los servidores A y B o los escritorios, por ejemplo, pueden hacer una diferencia en su salida, y asegúrese de que coincidan los mismos algoritmos de exhng clave. Las claves ecdsa más nuevas en producción también son muy débiles y no se recomienda su uso. o get - keyexchange rechazó el acceso parcial al mensaje seguro. Un montón de buena información solo paciente para buscarlo.


2
¿Podría intentar romper este muro de texto para que sea más fácil de seguir? Utilice la guía de formato y el código de formato y el contenido del archivo de texto como código, y si aclarará las cosas, colóquelos en sus propias líneas. Me encantaría editar tu respuesta si pudiera seguirla, pero no puedo.
Zanna

-5

O, si insiste en tener el enfoque de clave RSA, puede escribir ssh-keygen -t rsaen el servidor al que desea enviar SSH.

Eso debería generar claves públicas y privadas de RSA en '~ / .ssh / id_rsa'. Ahora todo lo que necesita hacer es copiar la clave pública debajo $HOME/.ssh/authorized_keysde todas esas máquinas desde las cuales tiene la intención de enviar ssh a la máquina en la que generó sus claves RSA.

¡Y luego siéntate y relájate!


1
¿Te das cuenta de que la pregunta no era sobre la clave del lado del cliente sino sobre la clave del servidor?
0xC0000022L
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.