¿La clave ssh debe llamarse id_rsa?

110

Me he encontrado con este problema un par de veces al crear servidores de compilación con autenticación por clave.

Me preguntaba si alguien más tiene experiencia en esto. Tengo un par de claves para mi usuario actual que pueden conectarse a diferentes máquinas. Digamos máquina1 y máquina2. He pegado mi clave pública en su respectivo archivo authorized_keys. El primero que he nombrado la primera clave id_rsa y la segunda clave doblador.

Cuando trato de conectarme a Bender obtengo el siguiente resultado con mi conexión ssh verbosa

debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

Solo ofrece la clave id_rsa, como puede ver arriba. ¿Es esto correcto? Si es así, ¿por qué? ¿Cómo puedo obtener más llaves? Sé que es un problema que veo de forma intermitente, porque en casa tengo varias llaves sin muchos problemas.

También agradecería una descripción general sobre cómo las claves públicas y privadas interactúan con el cliente y el servidor. Pensé que tenía una idea bastante decente, pero aparentemente me falta algo.

Por favor y gracias.

    
pregunta myusuf3 17.03.2011 - 16:37

3 respuestas

136

De forma predeterminada, ssh busca los archivos id_dsa y id_rsa . Las teclas no tienen que ser nombradas así, también puedes ponerle el nombre mykey , o incluso colocarlo en un directorio diferente. Sin embargo, si hace cualquiera de estos, entonces necesita hacer referencia explícitamente a la clave en el comando ssh de la siguiente manera:

ssh user@server -i /path/to/mykey

Si un comando no acepta -i , p. sshfs , usa la opción IdentityFile :

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 sugieren sus nombres, la clave privada debe mantenerse en secreto y la clave pública se puede publicar al público.

La autenticación de clave pública funciona con una clave pública y privada. Tanto el cliente como el servidor tienen sus propias claves. Al instalar openssh-server , las claves públicas y privadas del servidor se generan automáticamente. Para el cliente, tendrá que hacerlo por su cuenta.

Cuando (cliente) se conecta con un servidor, las claves públicas se intercambian. Recibirás los servidores uno, y el servidor tuyo. La primera vez que reciba la clave pública del servidor, se le pedirá que la acepte. Si esta clave pública cambia durante un tiempo, se le advertirá porque se está produciendo un posible ataque MITM (Man in the middle), 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 se encuentra en el archivo ~/.ssh/authorized_keys . Posibles razones por las cuales se niega la clave pública:

  • %código%:
    • Se especifica /etc/ssh/sshd_config o AllowUsers , pero el usuario de su servidor no figura en la lista de grupos o usuarios (predeterminado no definido, sin restricciones para que los usuarios o grupos inicien sesión).
    • AllowGroups o DenyUsers está especificado y está en la lista de usuarios o grupos.
    • Está intentando iniciar sesión como root, pero DenyGroups está establecido en PermitRootLogin (predeterminado No ).
    • yes se establece en PubkeyAuthentication (valor predeterminado No ).
    • yes se establece en una ubicación diferente, y las claves públicas no se agregan a ese archivo (valor predeterminado AuthorizedKeysFile , relativo al directorio inicial)
  • .ssh/authorized_keys : su clave pública no se agrega en este archivo (tenga en cuenta que este archivo se lee como usuario root)

Uso de llaves múltiples

No es raro usar múltiples claves. En lugar de ejecutar ~/.ssh/authorized_keys , puede usar un archivo de configuración, ssh user@host -i /path/to/identity_file .

Las configuraciones comunes son el IdentityFile (las claves) y el puerto. La siguiente configuración marcará "id_dsa" y "doblador" solo cuando se conecte con ~/.ssh/config :

Host yourhost
   IdentityFile ~/.ssh/id_dsa
   IdentityFile ~/.ssh/bender

Si omite ssh youruser@yourhost , la configuración se aplicará a todas las conexiones SSH. También se pueden especificar otras opciones para esta coincidencia de host, como Host yourhost , User youruser , etc. Esto le permitiría conectarse con la abreviatura Port 2222 en lugar de ssh yourhost .

    
respondido por el Lekensteyn 17.03.2011 - 16:58
30

Mi método favorito permite que la clave privada se seleccione automáticamente

IdentityFile ~/.ssh/%l_%r@%h_id_rsa

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 deseo conectarme desde mi máquina llamada foo a la barra como usuario, ejecuto:

ssh bar

Y ssh usaría automáticamente:

~/.ssh/foo_user@bar_id_rsa

Como el host local también está almacenado, esto permite directorios de inicio compartidos a través de NFS (¡diferentes claves por máquina!) o incluso identificando en qué máquina debía estar la llave ...

    
respondido por el Viperfang 19.02.2014 - 19:54
0

En consideración al comentario de StevenRoose de que lleva más tiempo especificar muchas claves, 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 como eso solo cambia con poca frecuencia, dependiendo del proyecto en el que estoy trabajando, estoy contento con él.

Aquí he vinculado mis claves para máquinas que se ejecutan en virtualbox:

$ cd .ssh/
$ ln -s adam_vbox-id_rsa.pub id_rsa.pub
$ ln -s adam_vbox-id_rsa id_rsa

$ ls -l
total 12
-rw------- 1 adam adam 1675 2013-10-04 02:04 adam_vbox-id_rsa
-rw-r--r-- 1 adam adam  396 2013-10-04 02:04 adam_vbox-id_rsa.pub
lrwxrwxrwx 1 adam adam   16 2013-10-04 02:17 id_rsa -> adam_vbox-id_rsa
lrwxrwxrwx 1 adam adam   20 2013-10-04 02:17 id_rsa.pub -> adam_vbox-id_rsa.pub
-rw-r--r-- 1 adam adam 3094 2013-10-04 02:09 known_hosts

También se podría agregar un script muy rápido para cambiar a otro conjunto sin tener que escribir manualmente el comando ln nuevamente.

Una vez más, esta no es una solución solo para dos claves, pero para un número mayor, podría ser viable.

    
respondido por el ajhcasual 04.10.2013 - 16:43

Lea otras preguntas en las etiquetas