¿Cómo almacenar claves SSH?

¿Cómo almacenar claves SSH?

Recientemente comencé a usar claves SSH en lugar de contraseñas (gracias a GitHub, por supuesto), así que tenga en cuenta que soy bastante nuevo en todo este concepto. Actualmente mis claves simplemente se encuentran en ~/.ssh, pero no estoy seguro de si es una buena práctica. Por ejemplo, si tengo varias máquinas, necesitaría duplicar mis claves privadas, lo cual creo que no es deseable. O, si mi disco duro se estropea, perderé esas claves, lo cual (supongo) tampoco es deseable.

Entonces, ¿cuáles son las mejores prácticas para almacenar claves SSH de forma segura, conveniente y confiable?

Parece que usar una tarjeta inteligente es una opción (verTarjetas inteligentes para almacenar claves gpg/ssh (Linux): ¿qué necesito?), ¿es éste el mejor?

Actualización: el motivo de la pregunta fue que muchos servicios (como GitHub, AWS EC2) proporcionan guías sobre cómo configurar claves SSH para usar el servicio, pero poca o ninguna información (por ejemplo, qué hacer si ya tiene una clave generada). por ssh-keygen[1], cuáles son las medidas de seguridad recomendadas). Y no está claro si esa información en realidad no es importante o si se espera que la sepas "por defecto".

Para resumir las respuestas hasta este punto(pero léalas, y si tiene algo que agregar, hágalo): parece que en este caso está bien si deja sus claves privadas en ~/.ssh, siempre y cuando las oculte a otras personas; pero asegúrese de tener otra forma de acceder al servicio para cargar o generar una nueva clave si la pierde (que suele ser el caso).

[1] GitHub solía proporcionarayuda sobre cómo administrar múltiples claves.

Respuesta1

Por ejemplo, si tengo varias máquinas, necesitaría duplicar las claves privadas, lo cual creo que no es deseable.

No, en realidad no es así. Si tiene varias máquinas, simplemente cree una clave privada separada en cada una. Para cada clave privada, simplemente cargue la clave pública correspondiente en GitHub utilizando el mismo proceso.

Además, si mi disco duro se estropea, perderé mi clave privada, lo cual (supongo) tampoco es deseable.

No precisamente; Si pierde su clave privada, simplemente genere una nueva y cargue la clave pública correspondiente.

Por si sirve de algo, tiene razón en que duplicar una clave privada es muy indeseable. Idealmente, una clave privada debería generarse en un archivo ( ~/.ssh/id_rsapor ejemplo) y deberíanuncadeje ese archivo; es decir, nunca debe copiarse, moverse y, especialmente, transferirse a través de una red. (por ejemplo, los excluyo de las copias de seguridad) Debido a la naturaleza de los protocolos de autenticación asimétricos, usted sólo debe preocuparse por mantener su clave privada fuera del alcance de otros. Si te excedes un poco y pierdes la noción, generalmente no es gran cosa. (Esto no debe confundirse con asimétricocifradoclaves privadas, por ejemplo, claves GPG, que probablemente desee conservar).

Respuesta2

Hay una herramienta muy buena llamada KeePass2 (http://keepass.info/) con la extensión (http://lechnology.com/software/keeagent/)

Puede almacenar allí contraseñas, claves SSH y mucho más (en la página oficial de KeePass hay extensiones mucho más útiles).
Si desea iniciar sesión automáticamente con sus claves SSH, solo necesita instalar PuTTY, Pageant y KeePass con KeeAgent. Si lo está configurando correctamente, no es necesario que configure las claves en PuTTY, Pageant o FileZilla.

Lo uso yo mismo y estoy muy contento con ello. Tengo más de 30 VPS y un servidor raíz con una cierta cantidad de claves SSH diferentes y lo único que tengo que hacer es abrir KeePass (no es mi contraseña principal segura) y luego solo necesito escribir mi contraseña en la consola.

Respuesta3

Agregaría que su navegador puede leer ~/.ssh/ si está utilizando la misma cuenta de usuario para ejecutar ambos.

¡Intentalo! Apunte su navegador a suprivadoclave en su directorio personal. Es divertido.

Por lo tanto, recomendaría almacenar las claves ssh en el directorio de inicio de otra cuenta de usuario.

unas palabras sobre las claves de protección con contraseña

  • Hoy en día, descifrar contraseñas no aleatorias es súper rápido. Verificargato hachís
    • (Aunque las contraseñas aleatorias y largas de más de 12 caracteres todavía tardan razonablemente en llegar a la fuerza bruta)
    • Por lo tanto, las claves ssh cifradas con AES no se podrán descifrar en el futuro inmediato, siempre y cuando se utilicen frases de contraseña largas y adecuadas. Verrecomendaciones de github
  • Entonces, algún sitio web puede adivinar su clave sin JavaScript. Y luego aplique fuerza bruta a la clave sin conexión.
  • Y los navegadores también pueden consultar su Portapapeles con JS. Por lo tanto, copiar y pegar frases de contraseña muy largas también lo pone en riesgo de sufrir ataques de JavaScript más sofisticados.

look_at_keys.html

 9 <HTML>
10 <HEAD>
11 <TITLE>look at keys</TITLE>
12 </HEAD>
13 <FRAMESET cols="20%, 80%">
14   <FRAMESET rows="100, 200">
15       <FRAME src="/Users/yourname/.ssh/stuff.pem">
16       <FRAME src="blah.html">
17   </FRAMESET>
18   <FRAME src="contents_of_frame3.html">
19 </FRAMESET>
20 </HTML>

Respuesta4

Puede almacenar sus claves ssh en un directorio separado dentro de una partición cifrada. Luego puedes usar ssh apuntando a ese directorio con -i:

ssh -i identity_file [email protected]

Descripción completa ( man ssh):

-i archivo_identidad

Selecciona un archivo desde el cual se lee la identidad (clave privada) para la autenticación de clave pública. El valor predeterminado es ~/.ssh/identity para la versión 1 del protocolo y ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 y ~/.ssh/id_rsa para la versión 2 del protocolo. Los archivos de identidad pueden También se puede especificar por host en el archivo de configuración.
Es posible tener múltiples opciones -i (y múltiples identidades especificadas en los archivos de configuración). Si la directiva CertificateFile no ha especificado ningún certificado explícitamente, ssh también intentará cargar información del certificado desde el nombre de archivo obtenido agregando -cert.pub a los nombres de archivos de identidad.

Mi enfoque de la seguridad es que divido la información en privada y general. No quiero cifrar toda la partición de mi hogar, por eso copio archivos secretos (como los de ~/.ssh) en una partición cifrada.

Creo que esto proporciona una seguridad bastante eficiente, porque el malware no encontrará nada en ~/.ssh y probablemente no escaneará todo el sistema ni los perfiles de shell para encontrar esa ubicación.

-F configfile 

establece la ruta al archivo de configuración.

PD: Crearía un alias alias ssh='ssh -i ... -F ...'y lo pondría en tu perfil.

PPS: No verifiqué esto todavía y no sé cómo funcionarán otros programas (como git) con estas configuraciones de ssh.

información relacionada