La forma más fácil de copiar claves SSH a otra máquina?

Soy perezoso en casa y uso la autenticación con contraseña para mis máquinas domésticas. Estoy listo para pasar a la autenticación basada en claves. Hay muchas opciones en la web sobre cómo hacer esto, que incluyen capturar y luego transferir la clave, transferir la clave directamente, etc.

Estoy buscando la forma más fácil y recomendada de copiar una clave, con suerte, hay un contenedor de conveniencia en algún lugar del paquete Ubuntu ssh.

Ya soy consciente de cómo desactivar los inicios de sesión con contraseña.

El ssh-copy-id comando (en el cliente openssh paquete e instalado por defecto) hace exactamente esto:

ssh-copy-id user@hostname.example.com

copia la clave pública de su identidad predeterminada (use -i identity_file para otras identidades) al host remoto.

La identidad predeterminada es su clave SSH "estándar". Consta de dos archivos (clave pública y privada) en su ~/.ssh directorio, normalmente con nombre identity, id_rsa, id_dsa, id_ecdsa o id_ed25519 (y lo mismo con .pub), dependiendo del tipo de clave. Si no creó más de una clave ssh, no tiene que preocuparse por especificar la identidad, ssh-copy-id simplemente la seleccionará automáticamente.

En caso de que no tengas una identidad, puedes generar una con la herramienta ssh-keygen.

Además, si el servidor utiliza un puerto diferente al predeterminado (22) debe usar comillas de esta manera (fuente):

ssh-copy-id "user@hostname.example.com -p <port-number>"

Me gusta la respuesta de Marcel. No conocía esta orden. Siempre he estado usando lo que había encontrado en el Sitio web de Oracle:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

Pensé en publicarlo aquí todavía, porque es una buena ilustración de lo que se puede lograr en código de shell con el poder de ssh. Pero usando el ssh-copy-id es definitivamente una forma más segura de hacerlo correctamente!

Tenga en cuenta que si la carpeta .ssh ya no existe, el comando anterior fallará. Además, podría ser mejor al crear el archivo establecer un permiso mínimo posible (básicamente lectura-escritura solo para el propietario). Aquí hay un comando más avanzado:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

Método gráfico

  1. Abrir AplicaciónContraseñas y ClavesMis Llaves Personales.
  2. Seleccione su clave y, a continuación, haga clic en RemotoConfigurar la clave para Secure Shell.

Set Up Computer for SSH Connection

En Ubuntu puedes obtener tus claves desde Launchpad:

ssh-import-id [launchpad account name]

Detalles:

  1. Necesitas una cuenta de Launchpad para iniciar sesión o crear una cuenta
  2. Después de iniciar sesión, haga clic en el botón junto a Claves SSH:
  3. Pegue el contenido de su archivo de clave pública en ese campo (incluido el comentario). Tal llave parece:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn

    Aqui, ssh-rsa indica que la clave es una clave RSA, AAAAB3Nza .... UyDOFDqJp es la clave real y lekensteyn es el comentario.

  4. Guarde la tecla pulsando Importar Clave Pública
  5. Si todo salió bien, su clave ahora debería aparecer en Claves SSH:

Paquete ssh-import-id debe instalarse en la máquina a la que se debe acceder de forma remota. Este paquete se instala junto con el openssh-server paquete es un paquete recomendado para openssh-server. Después de asegurarse de que ssh-import-id se ha instalado en el equipo cliente, ejecute:

ssh-import-id [launchpad account name]

Esto descargará la clave pública de los servidores de Launchpad a través de HTTPS, lo que lo protege de los ataques MITM.

En Ubuntu Lucid y anteriores, puede lograr lo mismo con:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

El echo el comando es necesario para obtener una nueva línea adicional después de la línea con la clave SSH.

para el puerto de encargo

ssh-copy-id -i "user@hostname.example.com -p2222"

- cambio los valores predeterminados a ~/.ssh / id_rsa.entonces, si quieres otra clave, pon la ruta de la clave después de-i

ADVERTENCIA: Si no escribiste-i, copiará todas las claves que encuentres en~/.ssh

Aquí hay una solución menos segura, pero muy simple(no recomendada para servidores):

Mover ~/.ssh a la nueva máquina y ejecutar ssh-add. HECHO!

RESPUESTA LARGA:

  1. En la máquina vieja, toma la carpeta ~/.ssh a una unidad USB o a cualquier otro almacenamiento que desee.
  2. En la máquina nueva, coloque la carpeta debajo de ~ alias /home/$USER.
  3. Ejecutar ssh-add, en la nueva máquina hecha.

ssh-copy-id hace exactamente eso. No estoy seguro de por qué algunas de las otras respuestas aquí agregan información inexacta. La ayuda muestra lo siguiente:

~$ ssh-copy-id -hUsage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname    -f: force mode -- copy keys without trying to check if they are already installed    -n: dry run    -- no keys are actually copied    -h|-?: print this help

Acabo de probar lo siguiente en el cliente Ubuntu 18.04 con un servidor CentOS 7.6 y funcionó a las mil maravillas. El ejemplo muestra el uso de un puerto personalizado de 2222, y especificando una clave pública en ~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 myusername@hostname.tld

Antes de ejecutar el comando, en realidad usé el -n cambie al final para hacer una ejecución en seco que confirme que el comando funcionará según lo previsto. Una vez que lo confirmé, ejecuté el comando nuevamente como se indicó anteriormente, sin el -n interruptor.

Si ya tiene una clave de host, como en el caso de AWS EC2, haga lo siguiente

cat ~/.ssh/id_rsa.pub | ssh -i hostkey.pem hostname@hostaddress 'cat >> .ssh/authorized_keys && echo "Key copied" '

La próxima vez, simplemente haga esto:

ssh hostname@hostaddress