ssh-keygen: generar claves SSH, registrar la clave pública y usar ssh-copy-id

Entorno de pruebaFamilia RHELAlmaLinux 9.8Cuenta rootVerificado el 2026-11-05
Comandos de redssh-keygenssh-copy-idUbicación/usr/bin/ssh-keygen

ssh-keygen es el comando de OpenSSH que crea el par de clave privada y clave pública que se usa para conectarse por SSH, y que además comprueba huellas, cambia la frase de contraseña y limpia known_hosts. Creé claves ed25519 y rsa en un servidor AlmaLinux 9, comprobé sus huellas, cambié la frase de contraseña y el comentario y probé ssh-copy-id en modo dry-run: lo único que pasa al servidor es la línea de la clave pública del archivo .pub.

Los nombres de cuenta y las rutas de los archivos de clave de la salida son valores de ejemplo, y las huellas, las claves públicas y el randomart son de claves creadas al escribir el artículo y borradas después. El comando que registra de verdad una clave pública en un servidor aparece escrito, pero no se ejecutó.

1️⃣ Generar claves con ssh-keygen: -t ed25519 y el comentario -C

Las claves se crean con la forma ssh-keygen -t tipo -C comentario. -t es el tipo de clave y -C es un comentario que se añade al final de la clave pública, así que ahí va un correo o el uso de la clave. Abajo está la salida completa al indicar el archivo con -f y pulsar Enter en las dos preguntas de la frase de contraseña.

ssh-keygen -t ed25519 -C "user@example.com" -f ~/.ssh/id_ed25519
Generating public/private ed25519 key pair.
Enter passphrase for "/home/user/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|     .           |
|    o o          |
|     = o   .     |
|    =   Soo .    |
|     = *+*.. .   |
|    o.B.o++ .    |
|    .=o*Eo.+     |
|    o+=@OO=      |
+----[SHA256]-----+

Si pulsas solo Enter en la pregunta de la frase de contraseña, la clave queda sin frase de contraseña. Si omites -f, antes de esa pregunta aparece una línea que pide dónde guardar el archivo. Entre paréntesis se ve la ruta por defecto, .ssh/id_ed25519 dentro de tu carpeta de inicio, y pulsando solo Enter se guarda ahí.

El randomart del final de la salida es la huella convertida en dibujo. Salió el mismo dibujo al crear la clave y al volver a comprobarla con -lv.

ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
-rw------- 1 user user 411 Oct 29 08:22 /home/user/.ssh/id_ed25519
-rw-r--r-- 1 user user  98 Oct 29 08:22 /home/user/.ssh/id_ed25519.pub

La clave privada se creó con permisos 600 y la pública con 644. La clave privada se queda solo en tu equipo y no se envía a ningún sitio.

cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com

La clave pública es una sola línea formada por el tipo de clave, el valor de la clave y el comentario separados por espacios. Esa línea va en el authorized_keys del servidor al que te conectas. El papel de cada archivo de la carpeta está agrupado en un árbol.

~/.sshCarpeta donde se juntan las claves y los registros de conexión · permisos 700
id_ed25519Clave privada · archivo que solo está en tu equipo · permisos 600
id_ed25519.pubUna línea de clave pública · va en el authorized_keys del servidor al que te conectas · permisos 644
authorized_keysLista de claves públicas que pueden entrar en este servidor (está en el servidor que las recibe)
known_hostsClaves de host de los servidores a los que te conectaste · ssh-keygen -R las borra línea a línea
configAlias, puerto y archivo de clave por servidor (ssh_config)

2️⃣ Opciones de ssh-keygen: -f, -N, -b, -q

Responder a las preguntas es cómodo cuando escribes a mano, pero en un script hay que quitar las preguntas. Si fijas el archivo con -f y la frase de contraseña con -N, la clave se crea al momento sin preguntar.

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N "" -C "deploy@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/deploy_key
Your public key has been saved in /home/user/.ssh/deploy_key.pub
The key fingerprint is:
SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com
The key's randomart image is:
+--[ED25519 256]--+
|        +        |
|       o +       |
|        +    .   |
|       . +  o    |
|    . o S ++o    |
|   . + +   B+    |
|  .oo * + .=+    |
|  E+o* Boo=++.   |
|   .=.=oo=o++.   |
+----[SHA256]-----+

Con comillas vacías detrás de -N la clave queda sin frase de contraseña, y la ubicación y la huella salieron de una vez sin ninguna pregunta.

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""
Generating public/private ed25519 key pair.
/home/user/.ssh/deploy_key already exists.
Overwrite (y/n)?

Si lo ejecutas otra vez con el mismo nombre, tras already exists pregunta si quieres sobrescribir. Al pulsar n no cambió nada y terminó con el código de salida 1. Para no sobrescribir por error una clave en uso, crea las claves nuevas con otro nombre.

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "user@example.com"
Generating public/private rsa key pair.
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:f+uwCSQjMka1BEHzXADwIWbrlbVRiP6Z4tjnwNwPVAA user@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o=BE*=+.         |
|oo.Oo++          |
| .+o+. .         |
|....  .          |
| .+ o.= S        |
| .o+o= + .       |
|  ++.o  . o .    |
| . o..o  . = .   |
|    o. .  o.o    |
+----[SHA256]-----+

En rsa, -b fija la longitud. Según el manual, el valor por defecto es 3072 bits; arriba se creó con 4096 bits y en la cabecera del randomart apareció RSA 4096. El manual indica que ed25519 tiene una longitud fija, así que -b se ignora.

ssh-keygen -f ~/.ssh/default_key -N "" -C "user@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/default_key
Your public key has been saved in /home/user/.ssh/default_key.pub
The key fingerprint is:
SHA256:mwy02fpKxjxEVvLC2EUJeaMIiNFOVS0GwWVjN9v0j4c user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|o+ o+=O=*..      |
|o + .*+B== .     |
| o ..oB+o.. .    |
|  . .+.=     +   |
|      = S   E o  |
|     + + o   .   |
|      B +        |
|     o o         |
|      ...        |
+----[SHA256]-----+

Al omitir -t se creó una clave ed25519.

ssh-keygen -q -t ed25519 -f ~/.ssh/backup_key -N "" -C "backup@example.com"; echo rc=$?
rc=0

Con -q se oculta todo, incluidas la huella y el randomart, y solo queda el código de salida. Sirve para crear con un script claves para varios servidores.

📌 Opciones principales: resultados de este artículo

OpciónTareaResultado en este artículo
-t tipoTipo de clave que se creaLa primera línea de la salida muestra el tipo, como ed25519 o rsa; si se omite, ed25519
-C comentarioComentario que se añade al final de la clave públicauser@example.com al final de la clave pública vista con cat
-f archivoRuta del archivo de claveUna línea que dice que se guardó en /home/user/.ssh/deploy_key; al repetir con el mismo nombre, already exists y Overwrite (y/n)?
-N fraseNueva frase de contraseña (passphrase); con comillas vacías, sin frase de contraseñaUbicación y huella de una vez, sin pregunta de frase de contraseña
-b bitsLongitud de la claveCon 4096 en rsa, RSA 4096 en la cabecera del randomart
-qOculta toda la salidaSolo queda la línea rc=0 impresa con echo
-lMuestra la huella de un archivo de claveLa misma huella SHA256 desde la clave pública y la privada; en authorized_keys, una línea por clave
-E hashIndica el tipo de hash de la huellaCon -E md5, una huella que empieza por MD5:00:7b:02:5e
-vJunto con -l, también muestra el randomartEl mismo randomart que al crear la clave
-yExtrae y muestra la clave pública a partir de la privadaUna línea de clave pública idéntica, letra por letra, al archivo .pub
-pCambia la frase de contraseña de la clave privadaAparece una línea que dice que se guardó con la nueva frase, y la clave privada pasa de 411 a 464 bytes
-P fraseFrase de contraseña antigua (la que está puesta)Con la frase correcta, la clave pública; con una incorrecta, incorrect passphrase supplied to decrypt private key
-cCambia el comentario; el nuevo va con -COld comment: user@example.com y Comment 'user@laptop' applied
-F hostBusca la línea de ese host en known_hosts# Host 192.0.2.10 found: line 1 y esa línea
-R hostBorra la línea de ese host de known_hostsknown_hosts updated y el archivo original known_hosts.old; un host que no está da not found
-HConvierte en hash los nombres de host y las direcciones de known_hostsLas líneas pasan a empezar por |1|, y un WARNING avisa de que el archivo .old conserva las líneas sin hash

📎 Otras opciones: según el manual oficial

OpciónTarea
-a rondasRondas de KDF (bcrypt_pbkdf) al guardar la clave privada; cuantas más, más lenta la comprobación de la frase y más resistente a la fuerza bruta; por defecto 16
-ACrea las claves de host que falten para cada tipo por defecto (rsa, ecdsa, ed25519) en las rutas por defecto
-BMuestra el resumen bubblebabble de un archivo de clave
-eConvierte una clave OpenSSH al formato -m (por defecto RFC4716) y la muestra, para otros programas SSH
-iConvierte una clave sin frase en formato -m (por defecto RFC4716) a formato OpenSSH y la muestra
-m formatoIndica el formato de clave (RFC4716, PKCS8, PEM); con -p, convierte claves privadas entre los formatos OpenSSH y PEM
-r hostMuestra el registro DNS SSHFP de ese nombre de host a partir de la clave pública
-s clave_CAFirma una clave pública con una clave de CA para crear un certificado
-LMuestra el contenido de un certificado
-KDescarga a la carpeta actual las claves resident guardadas en un autenticador FIDO
-Y signFirma un archivo con una clave SSH; la firma se guarda añadiendo .sig al nombre del archivo, y el nombre de uso va con -n

3️⃣ ssh-keygen -l para ver la huella y -y para extraer la clave pública

Si hay varios archivos de clave, solo con el nombre cuesta saber qué clave pública es pareja de qué clave privada. Como la huella es la misma en la clave privada y en la pública, al comparar con -l las huellas de los dos archivos se confirma la pareja.

ssh-keygen -l -f ~/.ssh/id_ed25519.pub
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
ssh-keygen -l -f ~/.ssh/id_ed25519
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)

El archivo de clave pública y el de clave privada dieron la misma huella SHA256. El 256 del principio es la longitud de la clave y el paréntesis del final, el tipo de clave.

ssh-keygen -l -E md5 -f ~/.ssh/id_ed25519.pub
256 MD5:00:7b:02:5e:b8:ba:85:0c:32:d7:15:7e:72:45:f7:bc user@example.com (ED25519)

Con -E md5 cambia a la huella MD5, el formato antiguo. Sirve para comparar cuando un servidor antiguo o un panel de administración muestra huellas MD5.

ssh-keygen -lv -f ~/.ssh/id_ed25519.pub
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
+--[ED25519 256]--+
|                 |
|     .           |
|    o o          |
|     = o   .     |
|    =   Soo .    |
|     = *+*.. .   |
|    o.B.o++ .    |
|    .=o*Eo.+     |
|    o+=@OO=      |
+----[SHA256]-----+

Si añades -v, vuelve a salir el randomart. Era el mismo dibujo que se mostró al crear la clave.

ssh-keygen -l -f ~/.ssh/authorized_keys
256 SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com (ED25519)

Si das un archivo con varias líneas de clave pública, como authorized_keys, sale una línea de huella por cada clave. Así se comprueba qué claves están registradas en un servidor.

ssh-keygen -y -f ~/.ssh/id_ed25519
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com

-y vuelve a sacar la clave pública de la privada. Si borraste el archivo .pub o llevaste solo la clave privada a otro equipo, basta con guardar esta salida en un archivo. La salida fue idéntica, letra por letra, al archivo .pub original.

4️⃣ ssh-keygen -p para cambiar la frase de contraseña y -c para cambiar el comentario

Si pones una frase de contraseña (passphrase) a la clave privada, aunque el archivo se filtre no se puede usar sin ella. A cambio, hay que escribirla en cada conexión, así que conviene para claves que una persona usa a mano y no para claves de scripts que se ejecutan solos, como los de cron.

ssh-keygen -p -f ~/.ssh/id_ed25519 -P "" -N "example-pass"
Key has comment 'user@example.com'
Your identification has been saved with the new passphrase.

-P es la frase antigua y -N la nueva. La clave no tenía frase, así que se pasaron comillas vacías a -P, y aparecieron dos líneas que dicen que se guardó de nuevo con la frase nueva. El manual indica que con -p solo, sin opciones, pregunta por turno la frase antigua y la nueva.

ls -l ~/.ssh/id_ed25519
-rw------- 1 user user 464 Oct 29 08:22 /home/user/.ssh/id_ed25519

Después de poner la frase, el archivo de la clave privada creció de 411 a 464 bytes.

ssh-keygen -y -f ~/.ssh/id_ed25519 -P "example-pass"
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com
ssh-keygen -y -f ~/.ssh/id_ed25519 -P "wrongpass"
Load key "/home/user/.ssh/id_ed25519": incorrect passphrase supplied to decrypt private key

Con una clave con frase, -y también necesita la frase pasada con -P. Con la frase correcta salió la misma clave pública que antes, y con una incorrecta terminó con el error incorrect passphrase. El manual aclara que no hay forma de recuperar una frase perdida, así que si la olvidas, crea una clave nueva y vuelve a registrar la clave pública.

ssh-keygen -c -C "user@laptop" -f ~/.ssh/id_ed25519 -P "example-pass"
Old comment: user@example.com
Comment 'user@laptop' applied
cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@laptop

-c cambia el comentario. Salen el comentario antiguo y el nuevo en una línea cada uno, y el comentario del final del archivo de clave pública también pasó a user@laptop. El comentario solo sirve para distinguir claves, así que el valor de la clave no cambió.

ssh-keygen -p -f ~/.ssh/id_ed25519 -P "example-pass" -N ""
Key has comment 'user@laptop'
Your identification has been saved with the new passphrase.

Para quitar la frase, pasa comillas vacías a -N. Salen las mismas dos líneas y, desde ese momento, -y volvió a funcionar sin -P.

5️⃣ ssh-keygen -R para borrar claves de host de known_hosts

En known_hosts se van acumulando, una por línea, las claves de host de los servidores a los que te conectaste. Si reinstalas un servidor y cambia su clave de host, ssh rechaza la conexión porque no coincide con la guardada, y la opción que borra la línea antigua es -R. El known_hosts de abajo es un archivo de tres líneas con direcciones de ejemplo, indicado con -f.

cat ~/.ssh/known_hosts
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW

Cada línea lleva el nombre de host o la dirección, el tipo de clave y el valor de la clave, en ese orden. La segunda línea, unida con una coma, tiene el nombre y la dirección del mismo servidor, y los corchetes y los dos puntos de la tercera indican un puerto distinto del 22.

ssh-keygen -F 192.0.2.10 -f ~/.ssh/known_hosts
# Host 192.0.2.10 found: line 1
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk

-F muestra la línea de ese host junto con su número de línea. Con un host que no está, no mostró nada y terminó con el código de salida 1.

ssh-keygen -R 192.0.2.10 -f ~/.ssh/known_hosts
# Host 192.0.2.10 found: line 1
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
cat ~/.ssh/known_hosts
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW

-R borra la línea de ese host y deja el archivo original como known_hosts.old. Tras borrarla, quedaron solo dos líneas.

ssh-keygen -R 192.0.2.99 -f ~/.ssh/known_hosts
Host 192.0.2.99 not found in /home/user/.ssh/known_hosts
ssh-keygen -R "[192.0.2.30]:2222" -f ~/.ssh/known_hosts
# Host [192.0.2.30]:2222 found: line 2
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old

Al indicar un host que no está, solo salió una línea not found. Para un servidor con otro puerto hay que poner los corchetes y el puerto tal como aparecen en known_hosts.

ssh-keygen -H -f ~/.ssh/known_hosts
WARNING: /home/user/.ssh/known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
cat ~/.ssh/known_hosts
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
|1|AG9QJQvGaQmVsEusSdND1lM9cKI=|Ue0a9suJIzN0yxoJgV7ClLBgSYw= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR

-H convierte en hash los nombres de host y las direcciones. Es la opción que evita que, si el archivo se filtra, se sepa a qué servidores te conectaste, y el nombre y la dirección que iban unidos con una coma se separaron en dos líneas con hash. También apareció un aviso de que el archivo .old guarda el contenido sin hash.

ssh-keygen -F server2.example.com -f ~/.ssh/known_hosts
# Host server2.example.com found: line 1
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR

Incluso en el archivo con hash, -F encontró la línea por el nombre.

6️⃣ ssh-copy-id para registrar la clave pública y authorized_keys

Aunque crees la clave, si el servidor no conoce esa clave pública sigues entrando con contraseña. El lugar donde el servidor conoce la clave pública es el ~/.ssh/authorized_keys de la cuenta a la que te conectas, y ssh-copy-id es el comando que mete en ese archivo la línea del .pub. La clave privada se queda en tu equipo y solo pasa la línea de la clave pública. Pulsa los botones de los pasos del diagrama de abajo para ver dónde queda cada archivo.

🔐 Cómo se usa el par de claves de ssh-keygen para conectarse
Diagrama explicativo
🔍 Pasos
$ ssh-keygen -t ed25519 -C user@example.comssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10ssh -i ~/.ssh/id_ed25519 user@192.0.2.10
💻 Mi equipo ~/.ssh
🔒id_ed25519Clave privada · no sale de aquí
🔑id_ed25519.pubUna línea de clave pública · se copia al servidor
➜Aún no está en el servidorSe copia una línea de clave públicaEl servidor comprueba con la clave pública
🖥️ Servidor ~/.ssh/authorized_keys
📄VacíaSolo se entra con contraseña
🔑ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.comClave pública registrada · solo entra la clave privada que forma pareja con esta línea
ssh-keygen crea la clave privada y la pública como un par. La clave privada se queda solo en ~/.ssh de tu equipo y la pública es una línea del archivo .pub. En este paso todavía no hay nada en el servidor, así que solo se entra con contraseña.
ssh-copy-id añade la línea de la clave pública al final de ~/.ssh/authorized_keys del servidor. La clave privada no se copia. La clave pública no tiene por qué ser secreta, así que puedes poner la misma línea en varios servidores.
Al conectarte, el servidor usa la clave pública de authorized_keys para comprobar la firma de tu clave privada. Si la pareja coincide, entras sin contraseña; en un equipo sin el archivo de clave privada, aunque sea la misma cuenta, te pide la contraseña.
ssh-copy-id -n -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: ERROR: ssh: connect to host 192.0.2.10 port 22: Connection timed out

-n es un dry-run, así que no escribe nada en el servidor. Aun así, ssh-copy-id primero intenta entrar con esa clave para descartar las que ya están registradas, y como 192.0.2.10 es una dirección para documentación, no hubo conexión y terminó con timed out. Las opciones detrás de -o pasan tal cual a ssh.

ssh-copy-id -n -f -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
=-=-=-=-=-=-=-=
Would have added the following key(s):

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
=-=-=-=-=-=-=-=

-f es el modo forzado que se salta esa comprobación. Junto con -n, la línea de clave pública que iría al servidor salió debajo de Would have added. Es la misma línea que el contenido del archivo .pub.

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10

El registro real se hace con este comando sin -n. Según el script de ssh-copy-id y su manual, pide una vez la contraseña de esa cuenta, añade la clave pública al final de ~/.ssh/authorized_keys del servidor y luego muestra Number of key(s) added: 1. Si no existen el archivo y la carpeta, los crea, y si ya está la misma clave, la salta.

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@192.0.2.10

Si el puerto no es el 22, pásalo con -p.

Donde no haya ssh-copy-id, añade tú mismo la línea de la clave pública al authorized_keys del servidor. Entra en el servidor con tu contraseña y sigue estos pasos. La salida se comprobó añadiendo el archivo .pub dentro del mismo servidor; en otro servidor, copia la línea del archivo .pub y añádela con echo.

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Si no existe la carpeta .ssh, créala y ajusta sus permisos a 700.

cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
ls -l ~/.ssh/authorized_keys
-rw------- 1 user user 100 Oct 29 08:22 /home/user/.ssh/authorized_keys

La línea de la clave pública entró en authorized_keys con permisos 600. El apartado StrictModes del manual de sshd_config indica que, con la configuración por defecto, sshd revisa primero los permisos de los archivos del usuario y no acepta el inicio de sesión si cualquiera puede escribir en ellos.

ssh -i ~/.ssh/id_ed25519 user@192.0.2.10

Cuando termines el registro, conéctate con la clave privada. Si la clave tiene un nombre por defecto como id_ed25519, ssh la encuentra solo; si tiene otro nombre como deploy_key, indica el archivo con la opción ssh -i.

🔲 Simulador del comando ssh-keygen

En el simulador de abajo puedes escribir tú mismo ssh-keygen para crear claves, comprobar huellas, cambiar la frase de contraseña, limpiar known_hosts y probar ssh-copy-id. Las huellas y las claves públicas son los mismos valores de ejemplo del artículo, y ssh-copy-id solo simula el registro en un servidor virtual.

Simulador del comando ssh-keygenOpenSSH 9.9p1 · user
[root@server work]#
Con las teclas ↑↓ recuperas los comandos que escribiste antes.

🔢 FAQ & contenido recomendado

El valor por defecto de ssh-keygen es ed25519, y su clave es corta: la línea de la clave pública ocupaba 98 bytes. La clave pública rsa de 4096 bits ocupaba 742 bytes; rsa se usa para conectarse a servidores o equipos antiguos que no aceptan ed25519.

Sí. Según el manual de ssh, ssh solo busca automáticamente los nombres por defecto como ~/.ssh/id_ed25519 y ~/.ssh/id_rsa, así que con otro nombre hay que indicarlo con -i al conectarse o escribirlo en IdentityFile de ~/.ssh/config.

Según el manual de sshd_config, cambia PasswordAuthentication a no y haz que sshd vuelva a leer la configuración. Desactívalo solo después de comprobar en otra terminal que entras con la clave. Si lo desactivas antes de comprobarlo, puedes quedarte fuera del servidor sin poder entrar ni con contraseña ni con clave.

ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Demuestra que eres humano: 2   +   6   =