Tras la resaca que hemos tenido con la vulnerabilidad de bash shellshock al tener que actualizar cientos de servidores Red Hat, os voy a explicar como realizar una relación de confianza entre servidores. ¿Para que sirve esto? En resumidas cuentas para acceder de un servidor a otro sin tener que estar escribiendo la contraseña. ¿Para que quiero esto? pues por ejemplo para lanzar desde un servidor, un script que sea capaz de conectarse a cada uno de esos cientos de servidores para actualizarlos. Para esto realmente existen otras herramientas mucho mas efectiva como puedan ser Chef o Puppet.
Supongamos que tenemos dos servidores:
- dbigcloud01
- hispabigdata01
Y queremos que desde dbigcloud01 podernos conectar por ssh el usuario root sin que nos solicite las credenciales a hispabigdata01.
Lo primero que vamos a hacer es conectarnos al servidor dbigcloud01 y generar un par de claves publicas-privadas RSA.
[root@dbigcloud01 ~]# openssl genrsa -out dbigcloudKey.pem 1024
Ahora vamos a extraer la clave pública.
[root@dbigcloud01 ~]# ssh-keygen -y -f dbigcloudkey.pem > dbigcloudkey.pub
Ahora en el fichero dbigcloudkey.pub disponemos de nuestra clave pública y debemos llevarnosla hasta hispabigdata01.
[root@dbigcloud01 ~]# scp -pr dbigcloudkey.pub root@hispabigdata01:/root
Nos pedira la clave para acceder a hispabigdata01 la introducimos, y el fichero se copiara.
Ahora accedemos via ssh a hispabigdata01 y tenemos que crear el directorio .ssh dentro de la carpeta /root con permiso 700 para que unicamente el usuario root tenga permisos sobre este directorio:
[root@hispabigdata01 ~]# mkdir .ssh [root@hispabigdata01 ~]# chmod 700 .ssh
y el fichero de copiamos antes vamos a copiarlo en la carpeta .ssh y lo vamos a renombrar a authorized_keys y cambiamos su permiso a 600 para que solo el usuario root tenga permisos sobre él.
[root@hispabigdata01 ~]# mv dbigcloudkey.pub .ssh/authorized_keys [root@hispabigdata01 ~]# chmod 600 .ssh/authorized_keys
Ahora si inentamos acceder desde dbigcloud01 a hispabigdata01 con el usuario root vereis que entraremos sin que nos pida la contraseña, de esta forma ya tenemos la relación de confianza entre servidores.
Es muy importante que os asegureis que los permisos son los que indico ya que sino no conseguireis la relación de confianza, lo mismo que se realiza para el usuario root se puede hacer para cualquier usuario.
chmod g-w /home/usuario
chmod 700 /home/usuario/.ssh
chmod 600 /home/usuario/.ssh/authorized_keys
Si veis que no conseguiis la relación de confianza podeis comprobar en el log secure el porque no podéis acceder.
tail -f /var/log/secure
Si recibiis un mensaje indicando algo así:
Authentication refused: bad ownership or modes for directory /root/.ssh
Revisad los permisos que le habéis asignado al directorio y al fichero, aunque tambien podeís tener activado en el fichero /etc/ssh/sshd_config la opción StrictModes on si la teneis será necesario establecerla a off y reiniciar el servicio ssh.
ACTUALIZACION
Tras como nos comenta Felipe podemos usar el sccript ssh-copy-id para copiar nuestra clave de forma segura entre servidores.
[root@dbigcloud01 ~]#ssh-copy-id -i dbigcloud.pub root@hispabigdata01