Network security.
Configurar acceso remoto usando pares de claves público/privada basado en SSH.
Para la conexión a servidores SSH con certificados se usa criptografía asimétrica (criptografía de clave pública o de dos claves). Dicho método consistente en el uso de una clave pública conocida y una privada confidencial nos permitirá usar encriptación de forma sencilla y segura. Conviene que tengamos claro como funciona ya que nos ayudará a no dudar en lo que estamos haciendo.
Servidor SSH. Introducción.
En teoría no es asunto de examen el servidor SSH en si. De hecho lo normal es que no toquemos ni su configuración a la hora de configurar el acceso remoto a este mediante pares de claves. En cualquier caso no tiene mucha complicación. Repasaremos solo los temas necesarios relacionados con el asunto que nos trae para el examen. El servidor SSH es otro de los componentes que se instala incluso en una instalación mínima. El paquete necesariuo ya instalado es openssh-server. Operaciones habituales con el servicio.
systemctl start/stop/reload/restart/enable/disable sshd.service
Ficheros de configuración.
Normalmente, tanto en Centos como en la mayoría de sistemas Linux con pocas variaciones la configuración de SSH con certificados será similar en cuanto a ficheros y ubicación. El fichero principal de configuración del servicio servidor ssh es /etc/ssh/sshd_config. Algunos parámetros importantes de configuración en “/etc/ssh/sshd_config” relacionados con acceso mediante pares de claves: PasswordAuthentication yes/no - Nos permite deshabilitar el acceso al servidor SSH mediantes password. Solo nos permitirá acceso mediante certificados.
Ficheros de configuración utilidades ssh. Desde el usuario que nos conectaremos a otros sistemas con servidor SSH debemos conocer los siguientes ubicaciones / ficheros importantes en el Home del usuario:
Fichero | Descripción |
---|---|
/etc/ssh/ssh_config ó ~/.ssh/config | Cliente SSH. Si existe el fichero concreto en el home sobreescribe el de etc. |
~/.ssh/authorized_keys | Servidor SSH. Almacena una lista de claves públicos para servidores. Cuando nuestro cliente se conecta a un servidor este le autentifica chequeando su clave pública firmada almacenada en este fichero. |
~/.ssh/id_rsa | Cliente SSH. The RSA private key used by ssh for version 2 of the SSH protocol. |
~/.ssh/id_rsa.pub | Cliente SSH. The RSA public key used by ssh for version 2 of the SSH protocol. |
~/.ssh/known_hosts | Cliente SSH. Cuando un cliente SSH se conecta por primera vez a un servidor SSH este le proporciona una clave de Host que se guarda en este fichero. En sucesivas conexiones la usará para verificar que el servidor al que se conecta es el mismo. Las utilidades cliente nos alertarán habitualmente ante incongruencias en de la clave de Host. |
Más información en la documentación oficial de Redhat al respecto.
Utilidades ssh.
ssh-keygen – Se usa inicialmente para generar los certificados.
ssh-copy-id – Se usa para simplificar la copa de certificados públicos entre sistemas ya que simplifica la tarea copiando el certificado en el sitio correcto sin que tengamos necesidad de saber más.
Generación y uso de certificados (cliente)
La configuración de acceso SSH con claves publico – privadas es muy sencilla. La mayor dificultad que nos podemos encontrar de cara al examen es tener claro el funcionamiento y un par de comandos.
Los pasos a seguir serán los siguientes:
Generar los certificados.
Generaremos los certificados en el servidor mediante el comando ssh-keygen.
ssh-keygen -t rsa
Como vemos durante el proceso nos pregunta donde almacenar el certificado privado (y luego almanca el público también en la misma ruta). También nos da la posibilidad de introducir una “passphrase” que nos preguntará cada vez que usemos el certificado. Podemos también no darle una passphrase para generar un certificado de uso directo. Verificamos que los permisos son bastante restrictivos para el directorio y fichero con certificado de clave privada.
Es muy importante que solo el usuario concreto pueda ver y manipular el certificado de clave privada.
Copiar el certificado público a otra máquina.
Ahora, si queremos acceder con nuestro usuario a otra máquina mediante certificado, esta tendrá que disponer de nuestro certificado público en su almacén de accesos confiables. Como hemos visto la utilidad ssh-copy-id nos puede facilitar la tarea. Le indicamos el usuario y equipo remoto al que queremos copiar nuestro certificado.
ssh-copy-id [email protected]
OJO con el usuario, copiaremos la clave ssh para ese usuario exclusivamente.
XXXXXXXXXXXXXXXXXXXXXXXXXxx COPIA SUCESOS
XXXXXXXXXXXXXXXXXXXXXXXXXxx COPIA SUCESOS
XXXXXXXXXXXXXXXXXXXXXXXXXxx COPIA SUCESOS
¿Que ha pasado en este proceso? Básicamente se ha copiado al equipo y usuario remoto en el fichero /root/.ssh/authorized_keys
el certificado público de nuestro usuario root local (/root/.ssh/id_rsa.pub
). Si existe el fichero es que ya tiene otros certificados por tanto le añade otra línea adicional para el nuevo certificado.
Además nos ha añadido a nuestro fichero local /root/.ssh/known_hosts
el key fingerprint del servidor remoto para identificarlo en sucesiva conexiones como el mismo equipo.
Ahora nos podremos ya conectar directamente con un cliente ssh y usará de forma transparente los certificados.
Si le dimos una passphrase al certificado nos la pedirá
Es importante conocer el proceso para poder realizarlo manualmente cuando sea necesario. Básicamente lo más importante es saber que podemos copiarle a mano el contenido de nuestro fichero de certificado de clave pública en ~/.ssh/id_rsa.pub
al fichero de certificados autorizados en el home del usuario en el equipo remoto ~/.ssh/known_hosts
. No es necesario que el usuario sea el mismo.
¿Y la clave privada? Esta se queda siempre en local bien protegida y obviamente no es para intercambiar.
REVISAR
ssh -l usuario SERVER ssh usuario@SERVER
Paso a paso Conectar por ssh y echar un ojo al knowhosts
¿Generar certificado con passphrse?
Referencias
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/s1-ssh-configuration.html#s2-ssh-configuration-keypairs
https://linuxcode.wordpress.com/2009/08/08/autentificacion-mediante-claves-publicas-en-ssh/
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/s1-ssh-configuration.html#s2-ssh-configuration-keypairs
http://www.itzgeek.com/how-tos/linux/centos-how-tos/ssh-passwordless-login-centos-7-rhel-7.html
http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/