Por defecto, ssh busca id_dsa
y id_rsa
archivos. Las claves no tienen que nombrarse así, puede nombrarlas de la misma mykey
manera o incluso colocarlas en un directorio diferente. Sin embargo, si hace cualquiera de esos, entonces necesita hacer referencia explícita a la clave en el comando ssh de la siguiente manera:
ssh user@server -i /path/to/mykey
Si un comando no acepta -i
, por ejemplo sshfs
, use la IdentityFile
opción:
sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint
Cómo funciona
Al generar una clave, obtendrá dos archivos: id_rsa
(clave privada) y id_rsa.pub
(clave pública). Como lo sugieren sus nombres, la clave privada debe mantenerse en secreto y la clave pública puede publicarse.
La autenticación de clave pública funciona con una clave pública y una privada. Tanto el cliente como el servidor tienen sus propias claves. Al instalar openssh-server
el servidor, las claves públicas y privadas se generan automáticamente. Para el cliente, tendrá que hacerlo por su cuenta.
Cuando usted (cliente) se conecta con un servidor, se intercambian claves públicas. Recibirá los servidores uno y el servidor suyo. La primera vez que reciba la clave pública del servidor, se le pedirá que la acepte. Si esta clave pública cambia con el tiempo, se le advertirá porque se está produciendo un posible ataque MITM (Hombre en el medio), interceptando el tráfico entre el cliente y el servidor.
El servidor verifica si tiene permiso para conectarse (definido en /etc/ssh/sshd_config
) y si su clave pública aparece en el ~/.ssh/authorized_keys
archivo. Posibles razones por las cuales se niega la clave pública:
/etc/ssh/sshd_config
:
AllowUsers
o AllowGroups
se especifica, pero el usuario de su servidor no figura en la lista de grupos o usuarios (el valor predeterminado no está definido, lo que no restringe el inicio de sesión de los usuarios o grupos).
DenyUsers
o DenyGroups
se especifica y estás en la lista de usuarios o grupos.
- Estás intentando iniciar sesión como root, pero
PermitRootLogin
está configurado en No
(predeterminado yes
).
PubkeyAuthentication
está establecido en No
(predeterminado yes
).
AuthorizedKeysFile
está configurado en una ubicación diferente y las claves públicas no se agregan a ese archivo (predeterminado .ssh/authorized_keys
, relativo al directorio de inicio)
~/.ssh/authorized_keys
: su clave pública no se agrega a este archivo (tenga en cuenta que este archivo se lee como usuario root)
Usando múltiples llaves
No es raro usar múltiples claves. En lugar de correr ssh user@host -i /path/to/identity_file
, puede utilizar un archivo de configuración, ~/.ssh/config
.
Las configuraciones comunes son IdentityFile (las claves) y el puerto. La siguiente configuración verificará "id_dsa" y "bender" solo cuando se conecte con ssh youruser@yourhost
:
Host yourhost
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/bender
Si omite Host yourhost
, la configuración se aplicará a todas las conexiones SSH. Otras opciones también se pueden especificar para este partido anfitrión, como User youruser
, Port 2222
, etc. Esto permitirá conectar con la abreviatura ssh yourhost
en lugar de ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender
.
ssh_config(5)
: El nombre del archivo puede usar la sintaxis de tilde para referirse al directorio de inicio de un usuario o uno de los siguientes caracteres de escape: '% d' (directorio de inicio del usuario local), '% u' (nombre de usuario local), '% l '(nombre de host local),'% h '(nombre de host remoto) o'% r '(nombre de usuario remoto). No es posible especificar comodines, pero supongo que esto debería ser lo suficientemente conveniente. Tenga en cuenta que un servidor tiene que sondear cada clave que envió, por lo que es mejor especificar menos claves. Los comodines en el host funcionan, consulte nuevamente la página del manual dessh_config(5)
..ssh/authorized_keys
archivo en las máquinas remotas. Si usa el.ssh/id_rsa
nombre de archivo estándar (o id_dsa, id_ecdsa o el reciente id_ed25519), ssh lo intentará automáticamente y no necesita especificarloIdentityFile
en su configuración (o el-i path/to/id_file
parámetro parassh
).Mi método favorito permite que la clave privada se seleccione automáticamente
SSH reemplazará% l con el nombre de la máquina local,% r con el nombre de usuario remoto y% h con el host remoto, por lo tanto, si quisiera conectarme desde mi máquina llamada foo to bar como usuario, ejecuto:
Y ssh usaría automáticamente:
Como el host local también se almacena, esto permite que los directorios de inicio se compartan a través de NFS (¡clave diferente por máquina!) O incluso que identifiquen en qué máquina estaba la clave ...
fuente
Teniendo en cuenta el comentario de StevenRoose de que lleva más tiempo especificar muchas teclas, y estoy jugando con muchas teclas, me gustaría sugerir mi solución personal.
Creo un enlace simbólico a la clave que quiero usar en ese momento, y dado que eso solo cambia con poca frecuencia dependiendo del proyecto en el que estoy trabajando, estoy contento con él.
Aquí he vinculado a mis claves para máquinas que se ejecutan en virtualbox:
También se podría agregar un script realmente rápido para cambiar a otro conjunto sin tener que volver a escribir manualmente el comando ln .
Nuevamente, esta no es una solución solo para dos teclas, pero para un número mayor, podría ser viable.
fuente