Secure Shell (SSH) es un poderoso protocolo de red criptografico, muy usado para establecer conexiones seguras entre un cliente y un servidor, soporta muchos mecanismos de autenticación, pero en esta ocasión se hablará de dos mecanismos muy populares; autenticación basada en contraseña y autenticación basada en llave publica.
Es posible poder generar nuevas llaves SSH, si se llegase al caso de querer dar acceso a terceros per se, en el que solo quieres autorizar ciertas partes del sistema sin utilizar contraseña. Cuando el usuario se conecta al servidor usando el comando ssh, se utiliza el parametro -i seguido de la ruta donde esta la llave publica almacenada en el equipo local.
$ ssh -i ~/.ssh/ec2.pem centos@123.456.789.123
En el ejemplo anterior, ec2.pem contiene información de la llave publica autorizada para acceder al servidor cuyo nombre de usuario es centos en este caso seguido de @ip_address.
Los archivos PEM no son muy dificiles de generar, la consola de AWS EC2 genera este archivo. Vamos a ver de que manera se puede generar este.
El siguiente comando generará una llave SSH de 4096 bits con una dirección de email como comentario:
$ ssh-keygen -t rsa -b4096 -m PEM -C "[email protected]"
Presione ENTER a continuación para aceptar la ubicación y el nombre de archivo, de lo contrario puede digitar antes una ruta completa y nombre de archivo diferente.
En lugar de poner una dirección de email, se puede añadir un comentario que lo distinga posteriormente, y si se agrega a dicha instrucción, el parametro -f nombre-archivo.pem, en seguida guardará el archivo de la llave en la ruta que designe en el parametro. Si no le especifica una ruta absoluta, esta se guardará en el directorio actual, que puede conocer con el comando pwd.
Este seria el resultado de la llave generada, como se puede apreciar, se le puede asignar un passphrase, esto agregará una capa extra de seguridad, aunque en la mayoria de los casos, los desarrolladores y administradores de sistemas no le asignan un passphrase precisamente para poder automatizar sus procesos.
Ahora que ya tienes generada una llave SSH, para poder autenticarse al servidor sin contraseña, necesitas copiar la llave publica, es decir, el contenido del archivo cuya extension es .pub, al servidor.
La forma mas facil de copiar la llave al servidor es a través del comando ssh-copy-id. En la termina del equipo local, escribe a continuación:
$ ssh-copy-id centos@123.456.789.123
En cuanto se conecte, la llave publica será añadida al archivo authorized_keys del usuario centos.
Después de haber hecho lo anterior, deberías ser capaz de conectarse al servidor sin necesidad de digitar la contraseña. Para probar esto, intenta logearte al servidor por ssh:
$ ssh -i mi-llave-de-servidor.pem centos@123.456.789.123
Con esto, hemos podido configurar la autenticación basada en llave publica al servidor por ssh, permitiendo que loguees al servidor sin necesidad de proveer una contraseña de usuario. Puedes añadir la misma llave a multiples servidores de la misma forma.
Puedes encontrar este tutorial y otros mas interesantes en este sitio: https://ferdinania.com