Generación y uso de claves SSH para la autenticación de host remoto
Las claves SSH son una forma de identificarse en un servidor SSH que utilice la criptografía de claves públicas y la autenticación de respuesta de verificación de identidad. Una ventaja inmediata de este método en comparación con la autenticación de contraseñas tradicional es que el servidor puede autenticarlo sin necesidad de enviar la contraseña por la red. También puede utilizarlo con la automatización, ya que permite la comunicación con el servidor de forma desatendida.
Generación de claves SSH en Linux
Para generar una clave SSH en el servidor Linux , ejecute el mandato ssh-keygen
. El mandato puede tomar distintivos si desea personalizar el tipo de clave que se genera y los algoritmos de firma que se utilizan para generar la clave.
Este ejemplo genera una clave RSA de 2048 bits estándar sin frase de contraseña. El mandato le solicita la ubicación para almacenar la clave (el valor predeterminado es $HOME/.ssh/) y una frase de contraseña para proteger la clave SSH.
root@bck2:/etc# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx root@bck2.example.com
The key's randomart image is:
+---[RSA 2048]----+
|. oo*%=+o.. |
|.++.oX+=. . |
|..+ooo=. . |
| E.+. .o. |
| + S..+ |
| . +. = |
| o = o |
| .o+ + |
| +o. |
+----[SHA256]-----+
Copia de la clave pública en los hosts remotos
Para autenticarse con un host remoto utilizando la clave SSH pública para utilizar el mandato ssh-copy-id
. Utilice el distintivo -i
para especificar la clave pública que va a copiar en el host remoto.
root@bck2: # ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.176.18.15
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '10.176.18.15 (10.176.18.15)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
/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: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.176.18.15's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@10.176.18.15'"
and check to make sure that only the key(s) you wanted were added.
El mandato ssh-copy-id añade las claves al archivo .ssh/authorized_key
del host remoto.
Prueba de que la clave se ha copiado correctamente
Para probar que la clave pública se ha copiado correctamente en el host remoto, ssh en el host remoto.
root@bck2:/etc# ssh root@10.176.18.15
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-53-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
Last login: Fri Feb 10 16:51:51 2017 from 169.46.3.91
root@bck1:~#
No se le solicitará la contraseña cuando realice ssh en el host remoto.
Claves SSH con una frase de contraseña
Proporcionar una frase de contraseña para la clave SSH proporciona una capa adicional de seguridad, pero también puede provocar problemas cuando se ejecutan scripts automatizados que requieren la clave protegida.
El agente ssh puede gestionar las claves. Sólo debe especificar la frase de contraseña una vez. ssh-agent conserva la clave en su memoria y la recupera cuando es necesaria. Si desea que el agente ssh gestione las claves, emita el mandato siguiente:
eval $(ssh-agent)
Después de que el programa inicie el mandato ssh-add para añadir la clave pública al agente, el programa de utilidad ssh-add busca los nombres de clave predeterminados, de los cuales id_rsa
es uno, y los añade al agente ssh. Después
de escribir la contraseña, la clave "desbloqueada" se almacena con ssh-agent y se puede utilizar para autenticarse en otros servidores.
root@bck1:~# ssh-add
Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
root@bck1:~#
Cada vez que abra una nueva sesión de terminal, se le solicitará la frase de contraseña de clave. Considere la posibilidad de ejecutar los mandatos siguientes para añadir el archivo .bash_profile
para que ssh-agent se inicie con
cada sesión bash y añada la clave.
echo ‘eval $(ssh-agent)’ >> ~/.bash_profile
echo ‘ssh-add’ >> ~/.bash_profile