He estado creando múltiples claves SSH en Debian para diferentes cuentas (es decir, Digital Ocean, GitHub y Bitbucket), pero se está volviendo complicado muy rápidamente.
Al enumerar el contenido de mi carpeta .ssh, obtengo:
digOcn digOcn.pub github github.pub id_rsa id_rsa.pub
(Yo uso la id_rsa
clave para Bitbucket).
Hago lo eval 'ssh-agent -s'
que hago y luego "agrego" las claves así:
ssh-add ~/.ssh/github
(y luego ingresando la frase de contraseña)ssh-add ~/.ssh/id_rsa
(y luego ingresando la frase de contraseña)ssh-add ~/.ssh/digOcn
(Cuando intento agregardigOcn
, dice "Permiso denegado". No tratosudo
de evitar estropear algo y también porque las otras claves no lo requeríansudo
).
Aquí está la parte confusa: actuar ssh-add -l
me da esto:
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 /home/USER/.ssh/id_rsa (RSA)
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 /home/USER/.ssh/github (RSA)
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 github (RSA)
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 USER@COMPUTER_NAME (RSA)
Sí, agregué claves SSH en el pasado, pero no puedo volver sobre lo que hice. Probablemente por eso hay ambos./home/USER/.ssh/github
y github
.
¿Qué he hecho mal? ¿Cómo debería organizar mis claves SSH?
Respuesta1
En primer lugar, no hay nada de malo en utilizar claves diferentes para cuentas diferentes. Esto es bastante excesivo para los shells interactivos, pero existen razones legítimas para hacerlo cuando se trata de otros servicios no interactivos. Por ejemplo, hace unos años GitHub comenzó a permitir claves SSH más potentes, mientras que Bitbucket insistió en utilizar claves más débiles durante un tiempo más. La acción correcta en ese momento fue utilizar claves diferentes para acceder a GitHub y Bitbucket.
Otro ejemplo es rsync
. Si está utilizando rsync
, por ejemplo, implementar archivos en un servidor web, entonces probablemente desee claves SSH dedicadas para ello. Estos le permiten establecer permisos diferentes a los que normalmente usaría con su cuenta interactiva.
Volviendo a su pregunta sobre la administración de múltiples claves: SSH le permite configurar diferentes opciones para diferentes destinos. Para hacer eso necesitas editar un archivo ~/.ssh/config
como este:
Host bitbucket.org
User hg
IdentitiesOnly yes
IdentityFile /home/user/.ssh/bitbucket
Host github.com gist.github.com
User git
IdentitiesOnly yes
IdentityFile /home/user/.ssh/github
El archivo ~/.ssh/config
debe tener permisos 0600 (no recuerdo en este momento si SSH lo aplica o no, pero ciertamente no hace daño).
Por supuesto, también puedes usar el mismo mecanismo para shells interactivos, así que configura cosas como nombre de usuario remoto (si es diferente del local), puerto remoto, acorta el nombre de host, etc. Por ejemplo:
Host sm
Hostname sphygmomanometer.example.com
User human
Port 2222
Entonces puedes simplemente correr
ssh sm
en lugar de
ssh -p 2222 [email protected]
También se permiten comodines:
Host *
ControlPath ~/.ssh/ctl-%u-%r-%h-%p
ControlMaster auto
ControlPersist 5m
Lea el manual para más detalles.
Por último, pero no menos importante:no"hacer la eval 'ssh-agent -s'
cosa". Contrariamente a la creencia popular, esto tiene graves implicaciones para la seguridad. La forma correcta de hacerlo es así:
ssh-agent /bin/bash
ssh-add
(luego ingrese sus contraseñas clave cuando se le solicite). Eso es todo, no lo hagas llave por llave, ni de ninguna otra forma.
Esto ejecuta un nuevo shell en el que se cargan sus claves, y cuando desee revocar el acceso, solo utilice exit
este shell. Si "hace la eval 'ssh-agent -s'
cosa", los agentes de autenticación permanecen ejecutándose mucho después de cerrar la sesión y pueden (y eventualmente se usarán) para acceso no autorizado.
Editar:Pruebe este pequeño experimento:
eval $(ssh-agent -s)
- cerrar sesión o matar la terminal
- inicie sesión nuevamente o abra una nueva terminal
pgrep ssh-agent
Nadie los elimina ssh-agent
, permanecen ahí hasta el siguiente reboot
, listos para ser utilizados por el malware más reciente.