Cómo configurar las claves SSH en CentOS 7
Introducción
SSH, o shell seguro, es un protocolo encriptado utilizado para administrar y comunicarse con los servidores. Al trabajar con un servidor CentOS, lo más probable es que pase la mayor parte de su tiempo en una sesión de terminal conectada a su servidor a través de SSH.
En esta guía, nos centraremos en la configuración de claves SSH para una instalación de CentOS 7 vainilla. Las claves SSH proporcionan una forma directa y segura de iniciar sesión en su servidor y se recomiendan para todos los usuarios.
Paso 1 – Crear el par de claves RSA
El primer paso es crear un par de claves en la máquina cliente (normalmente su ordenador):
- ssh-keygen
Por defecto, ssh-keygen
creará un par de claves RSA de 2048 bits, que es lo suficientemente seguro para la mayoría de los casos de uso (puede pasar opcionalmente la bandera -b 4096
para crear una clave mayor de 4096 bits).
Después de introducir el comando, debería ver el siguiente mensaje:
OutputGenerating public/private rsa key pair.Enter file in which to save the key (/your_home/.ssh/id_rsa):
Pulse ENTER
para guardar el par de claves en el subdirectorio .ssh/
de su directorio principal, o especifique una ruta alternativa.
Si ha generado previamente un par de claves SSH, puede ver el siguiente aviso:
Output/home/your_home/.ssh/id_rsa already exists.Overwrite (y/n)?
Si elige sobrescribir la clave en el disco, ya no podrá autenticarse utilizando la clave anterior. Tenga mucho cuidado al seleccionar «sí», ya que se trata de un proceso destructivo que no se puede revertir.
A continuación, debería ver el siguiente aviso:
OutputEnter passphrase (empty for no passphrase):
Aquí puede introducir opcionalmente una frase de contraseña segura, que es muy recomendable. Una frase de contraseña añade una capa adicional de seguridad para evitar que usuarios no autorizados inicien sesión. Para aprender más sobre la seguridad, consulte nuestro tutorial sobre Cómo configurar la autenticación basada en clave SSH en un servidor Linux.
A continuación, debería ver la siguiente salida:
OutputYour identification has been saved in /your_home/.ssh/id_rsa.Your public key has been saved in /your_home/.ssh/id_rsa.pub.The key fingerprint is:a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 [email protected]_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+
Ahora tiene una clave pública y privada que puede utilizar para autenticarse. El siguiente paso es colocar la clave pública en su servidor para que pueda utilizar la autenticación basada en clave SSH para iniciar sesión.
Paso 2 – Copiar la clave pública al servidor CentOS
La forma más rápida de copiar su clave pública al host CentOS es utilizar una utilidad llamada ssh-copy-id
. Debido a su simplicidad, este método es muy recomendable si está disponible. Si no tiene ssh-copy-id
disponible en su máquina cliente, puede utilizar uno de los dos métodos alternativos proporcionados en esta sección (copiar a través de SSH basado en contraseña, o copiar manualmente la clave).
Copiar su clave pública utilizando ssh-copy-id
La herramienta ssh-copy-id
está incluida por defecto en muchos sistemas operativos, por lo que puede tenerla disponible en su sistema local. Para que este método funcione, ya debe tener acceso SSH con contraseña a su servidor.
Para utilizar la utilidad, sólo necesita especificar el host remoto al que desea conectarse y la cuenta de usuario a la que tiene acceso SSH con contraseña. Esta es la cuenta a la que se copiará su clave pública SSH.
La sintaxis es:
- ssh-copy-id [email protected]_host
Es posible que vea el siguiente mensaje:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
Esto sólo significa que su ordenador local no reconoce el host remoto. Esto ocurrirá la primera vez que te conectes a un nuevo host. Escriba «sí» y presione ENTER
para continuar.
A continuación, la utilidad buscará en su cuenta local la clave id_rsa.pub
que creamos anteriormente. Cuando encuentre la clave, le pedirá la contraseña de la cuenta del usuario remoto:
Output/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 [email protected]'s password:
Escriba la contraseña (lo que escriba no se mostrará por motivos de seguridad) y pulse ENTER
. La utilidad se conectará a la cuenta en el host remoto utilizando la contraseña que usted proporcionó. A continuación, copiará el contenido de su clave ~/.ssh/id_rsa.pub
en un archivo en el directorio principal ~/.ssh
de la cuenta remota llamado authorized_keys
.
Debería ver la siguiente salida:
OutputNumber of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"and check to make sure that only the key(s) you wanted were added.
En este punto, su clave id_rsa.pub
ha sido cargada en la cuenta remota. Puede continuar con el paso 3.
Copiando la clave pública usando SSH
Si no tiene ssh-copy-id
disponible, pero tiene acceso SSH basado en contraseña a una cuenta en su servidor, puede cargar sus claves usando un método SSH convencional.
Podemos hacer esto usando el comando cat
para leer el contenido de la clave pública SSH en nuestra computadora local y canalizar eso a través de una conexión SSH al servidor remoto.
En el otro lado, podemos asegurarnos de que el directorio ~/.ssh
existe y tiene los permisos correctos bajo la cuenta que estamos utilizando.
Entonces podemos dar salida al contenido que hemos canalizado en un archivo llamado authorized_keys
dentro de este directorio. Utilizaremos el símbolo de redirección >>
para añadir el contenido en lugar de sobrescribirlo. Esto nos permitirá añadir claves sin destruir las anteriores.
El comando completo tiene el siguiente aspecto:
- cat ~/.ssh/id_rsa.pub | ssh [email protected]_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Es posible que vea el siguiente mensaje:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
Esto significa que su ordenador local no reconoce el host remoto. Esto ocurrirá la primera vez que se conecte a un nuevo host. Escriba «sí» y pulse ENTER
para continuar.
A continuación, se le pedirá que introduzca la contraseña de la cuenta del usuario remoto:
Output [email protected]'s password:
Después de introducir su contraseña, el contenido de su clave id_rsa.pub
se copiará al final del archivo authorized_keys
de la cuenta del usuario remoto. Continúe con el paso 3 si esto fue exitoso.
Copiando la clave pública manualmente
Si no tiene acceso SSH basado en contraseña a su servidor disponible, tendrá que completar el proceso anterior manualmente.
Agregaremos manualmente el contenido de su archivo id_rsa.pub
al archivo ~/.ssh/authorized_keys
en su máquina remota.
Para ver el contenido de su clave id_rsa.pub
, escriba esto en su ordenador local:
- cat ~/.ssh/id_rsa.pub
Verá el contenido de la clave, que debería ser algo parecido a esto:
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== [email protected]
Acceda a su host remoto utilizando cualquier método que tenga disponible.
Una vez que tengas acceso a tu cuenta en el servidor remoto, debes asegurarte de que el directorio ~/.ssh
existe. Este comando creará el directorio si es necesario, o no hará nada si ya existe:
- mkdir -p ~/.ssh
Ahora, puede crear o modificar el archivo authorized_keys
dentro de este directorio. Puede añadir el contenido de su archivo id_rsa.pub
al final del archivo authorized_keys
, creándolo si es necesario, utilizando este comando:
- echo public_key_string >> ~/.ssh/authorized_keys
En el comando anterior, sustituya el public_key_string
por la salida del comando cat ~/.ssh/id_rsa.pub
que ejecutó en su sistema local. Debe comenzar con ssh-rsa AAAA...
.
Por último, nos aseguraremos de que el directorio ~/.ssh
y el archivo authorized_keys
tienen los permisos adecuados establecidos:
- chmod -R go= ~/.ssh
Esto elimina recursivamente todos los permisos de «grupo» y «otros» para el directorio ~/.ssh/
.
Si estás utilizando la cuenta root
para configurar las claves de una cuenta de usuario, también es importante que el directorio ~/.ssh
pertenezca al usuario y no a root
:
- chown -R sammy:sammy ~/.ssh
En este tutorial nuestro usuario se llama sammy pero debes sustituir el nombre de usuario apropiado en el comando anterior.
Ahora podemos intentar la autenticación sin contraseña con nuestro servidor Ubuntu.
Paso 3 – Autenticar a su servidor CentOS usando claves SSH
Si ha completado con éxito uno de los procedimientos anteriores, debería ser capaz de iniciar sesión en el host remoto sin la contraseña de la cuenta remota.
El proceso básico es el mismo:
- ssh [email protected]_host
Si es la primera vez que se conecta a este host (si utilizó el último método anterior), puede ver algo así:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
Esto significa que su ordenador local no reconoce el host remoto. Escriba «sí» y luego presione ENTER
para continuar.
Si no suministró una frase de contraseña para su clave privada, se conectará inmediatamente. Si proporcionó una frase de contraseña para la clave privada cuando la creó, se le pedirá que introduzca la frase de contraseña ahora. Después de la autenticación, una nueva sesión de shell debería abrirse para usted con la cuenta configurada en el servidor CentOS.
Si la autenticación basada en la clave fue exitosa, continúe para aprender cómo asegurar aún más su sistema deshabilitando la autenticación por contraseña.
Paso 4 – Deshabilitar la autenticación por contraseña en su servidor
Si pudo iniciar sesión en su cuenta usando SSH sin una contraseña, ha configurado exitosamente la autenticación basada en la clave SSH para su cuenta. Sin embargo, su mecanismo de autenticación basado en contraseña sigue activo, lo que significa que su servidor sigue expuesto a ataques de fuerza bruta.
Antes de completar los pasos de esta sección, asegúrese de que tiene configurada la autenticación basada en clave SSH para la cuenta root de este servidor o, preferiblemente, que tiene configurada la autenticación basada en clave SSH para una cuenta no root de este servidor con privilegios sudo
. Este paso bloqueará los inicios de sesión basados en contraseñas, por lo que es crucial asegurarse de que aún podrá obtener acceso administrativo.
Una vez que haya confirmado que su cuenta remota tiene privilegios administrativos, inicie sesión en su servidor remoto con claves SSH, ya sea como root o con una cuenta con privilegios sudo
. Luego, abra el archivo de configuración del demonio SSH:
- sudo vi /etc/ssh/sshd_config
Dentro del archivo, busque una directiva llamada PasswordAuthentication
. Ésta puede estar comentada. Presione i
para insertar el texto, y luego descomente la línea y ponga el valor en «no». Esto deshabilitará su capacidad para iniciar sesión a través de SSH utilizando contraseñas de cuentas:
...PasswordAuthentication no...
Cuando haya terminado de hacer los cambios, presione ESC
y luego :wq
para escribir los cambios en el archivo y salir. Para implementar realmente estos cambios, necesitamos reiniciar el servicio sshd
:
- sudo systemctl restart sshd.service
Como precaución, abra una nueva ventana de terminal y compruebe que el servicio SSH funciona correctamente antes de cerrar esta sesión:
- ssh [email protected]_host
Una vez que haya verificado su servicio SSH, puede cerrar con seguridad todas las sesiones actuales del servidor.
El demonio SSH en su servidor CentOS ahora sólo responde a las claves SSH. La autenticación basada en contraseñas se ha desactivado con éxito.
Conclusión
Ahora debería tener configurada la autenticación basada en claves SSH en su servidor, lo que le permite iniciar sesión sin proporcionar una contraseña de cuenta.
Si desea aprender más sobre cómo trabajar con SSH, eche un vistazo a nuestra Guía de fundamentos de SSH.