lunes, 21 de enero de 2013

Copiar archivos remotamente sin contraseña por ssh usando certificado digital

Bueno si quieres automatizar una tarea de copia de archivos de un servidor a otro mediante ssh sin necesidad de que te pida contraseñas, puedes hacerlo mediante certificados digitales. Pasare a explicar de forma detallada:



Primero creamos los certificados digitales que se usaran para abrir la comunicación segura, mediante el comando:

#ssh-keygen -t dsa   (de preferencia ejecutar este comando en el servidor)

Podría generarse certificado con llaves del tipo RSA pero en este caso lo haremos con DSA, algo que es importante es que al ejecutar el comando pedirá una contraseña que protegerá el acceso a los archivos, en nuestro caso colocaremos en blanco para que este pequeño manual sea sencillo de entender y configurar.

El comando anterior generara dos archivos (id_dsa  y  id_das.pub o el nombre que quieras colocarle), en uno de ellos se ubica una llave privada y en otra la llave publica, la única diferencia entre los dos archivos como verán (puede listar haciendo un ls -la) es la extensión en el nombre del archivo. Debemos tener cuidado al transportar estos archivos o sacarles copia, debido a que si alguien no autorizado tiene acceso a estos archivos podría ingresar a nuestro equipo a través de ssh. OJO.

NOTA.- Ambos archivos deben tener permisos del tipo 600, para esto puede usar el comando chmod 600 archivo. Incluido el archivo authorized_keys que sera generado en pasos siguiente. OJO esta aclaración es importante sino el servicio no funcionara correctamente.

Una vez que tenemos estos dos archivos lo que hacemos es configurar el server y los clientes (se recomienda que los archivos anteriormente generados se hagan en el server). El equipo Server es el que almacenara los archivos copiados por los clientes. Con esta aclaración nos vamos al server en mi caso un Ubuntu 10.04. y ahí lo que hacemos es agregar el contenido del archivo id_dsa.pub al archivo authorized_keys ubicado en  ~/.ssh/. Ahora necesitamos hacer otra aclaración la ruta mencionada hace referencia a la carpeta del usuario con el cual se hará la copia, para aclarar esto haremos un ejemplo: si yo quisiera copiar un archivo al server desde el cliente ejecutaría un comando parecido a este "scp archivo usuario@ip_server:/carpeta" entonces si analizamos el comando anterior, después de ejecutar este comando el server me pedirá la contraseña del usuario, hecho esto nos dará permiso a escribir en la carpeta del usuario, entonces es obvio que lo que debemos configurar en authorized_keys es el acceso de este usuario con este certificado digital. Resumiendo entonces lo que nosotros estamos haciendo en este manual es evitar esta contraseña del usuario y en lugar de esta usaremos un certificado digital (los dos archivos que generamos). Entonces regresando a nuestra configuración deberemos crear el archivo authorized_keys en la ruta ~/.ssh/ (/home/usuario/.ssh/authorized_keys en caso de que estemos dando acceso a una carpeta administrada por el usuario "usuario").  Caso ya exista el archivo lo que debemos hacer es agregar el contenido (id_das.pub) al final de este archivo.

Hecho esto lo que hacemos es irnos al archivo de configuración del servicio SSH (/etc/ssh/sshd_conf) ahí debemos verificar que estos parámetros estén habilitados y con sus flag respectivos como se muestra a continuación:


RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Luego de esto puedo reiniciar el servicio de SSH en el server con el comando:

#/etc/init.d/sshd restart

Listo ya estaría terminada la configuración en el server y pasamos al cliente. En caso del cliente únicamente necesitamos que este tenga acceso al archivo id_dsa (o llave privada) con esta obtendrá el permiso para copiar o accesar al servidor con el usuario configurado anteriormente. Por ejemplo el cliente podría copiar archivos ejecutando el siguiente comando:

#scp -i id_dsa archivo usuario@server:/home/usuario/carpeta_destino  (aquí yo no debería pedir contraseña si todo esta bien configurado)

Ahora si quisiera abrir una consola mediante ssh también se puede solo hay que hacer referencia al certificado (archivo id_dsa) y nos permitirá el acceso.

NOTA.- Por seguridad se deben tomar varias medidas: Primero cuidar que estos archivos sean copiados de forma segura y no se de acceso a nadie que pueda vulnerar  nuestra seguridad, segundo el usuario con el cual debe ser configurado el acceso debe tener un nivel básico de acceso es decir no debe tener nivel de root ni permisos para poder hacer cambios en nuestro servidor y finalmente el punto 3 que es el mas importante es que el servicio ssh debe estar bloqueado y permitir únicamente ser accedido desde nuestra red interna sino podríamos estar abriendo un orificio de seguridad.

No hay comentarios.:

Publicar un comentario