# Asegurar el acceso SSH deshabilitando el login root y la autenticación por clave pública con Ansible

- Link: https://binariocero.com/ansible/asegurar-el-acceso-ssh-deshabilitando-el-login-root-y-la-autenticacion-por-clave-publica-con-ansible
- Published: 2025-08-03T10:05:59+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

El acceso remoto a servidores a través de SSH es una práctica habitual en la administración
de sistemas, pero también representa un vector de ataque común si no se configura
adecuadamente. En particular, permitir el inicio de sesión como usuario `root` o
habilitar claves públicas sin una gestión cuidadosa puede comprometer la seguridad
del sistema.

Este artículo describe cómo automatizar, mediante **Ansible**, la desactivación 
del acceso SSH como `root` y la autenticación por clave pública, reforzando así 
la seguridad del servicio SSH. Se incluye un _playbook_ listo para ser utilizado
en sistemas **Debian/Ubuntu** y **CentOS/RHEL**.

## Objetivos

 * Detectar automáticamente la distribución del sistema.
 * Realizar una copia de seguridad del archivo de configuración SSH (`sshd_config`).
 * Modificar las directivas `PermitRootLogin` y `PublicKeyAuthentication` para deshabilitarlas.
 * Reiniciar el servicio SSH con el nombre correcto según la distribución detectada.

## Consideraciones previas

Antes de ejecutar este playbook, asegúrate de:

 * Tener una cuenta de usuario con privilegios `sudo` o de root para ejecutar las
   tareas necesarias.
 * Establecer una conexión Ansible funcional hacia los hosts objetivo.
 * Disponer de un método alternativo de acceso (por ejemplo, consola local o KVM)
   en caso de errores que impidan acceder por SSH después de aplicar los cambios.

## Playbook de Ansible

    ```wp-block-preformatted
    ---- name: Deshabilitar login root y claves públicas en SSH  hosts: all  become: yes  tasks:    - name: Detectar distribución      ansible.builtin.setup:        filter: ansible_distribution    - name: Copia de seguridad de sshd_config      ansible.builtin.copy:        src: /etc/ssh/sshd_config        dest: /etc/ssh/sshd_config.bak        remote_src: yes        mode: '0644'    - name: Deshabilitar acceso root      ansible.builtin.lineinfile:        path: /etc/ssh/sshd_config        regexp: '^#?PermitRootLogin'        line: 'PermitRootLogin no'        backup: yes    - name: Deshabilitar autenticación por clave pública      ansible.builtin.lineinfile:        path: /etc/ssh/sshd_config        regexp: '^#?PublicKeyAuthentication'        line: 'PublicKeyAuthentication no'        create: yes        backup: yes    - name: Reiniciar servicio SSH      ansible.builtin.service:        name: "{{ 'ssh' if ansible_distribution in ['Debian', 'Ubuntu'] else 'sshd' }}"        state: restarted
    ```

## Descripción de tareas

 1. **Detección de distribución**
    Se utiliza el módulo `setup` para recopilar información
    del sistema y detectar la distribución. Esto permite adaptar el nombre del servicio
    SSH según el sistema operativo.
 2. **Copia de seguridad del archivo `sshd_config`**
    Se realiza una copia del archivo
    actual antes de modificarlo, lo que permite restaurar la configuración original
    en caso necesario.
 3. **Desactivación del login como root**
    Se modifica (o crea) la línea `PermitRootLogin
    no` para evitar el acceso directo del usuario `root` vía SSH.
 4. **Desactivación de autenticación por clave pública**
    Se asegura que la opción `
    PublicKeyAuthentication` esté deshabilitada, cerrando el acceso por esta vía incluso
    si existen claves autorizadas en el sistema.
 5. **Reinicio del servicio SSH**
    Se reinicia el servicio SSH con el nombre correcto
    para que los cambios surtan efecto de inmediato.

## Conclusión

Este playbook de Ansible proporciona una forma sencilla y reutilizable de aplicar
políticas de endurecimiento del servicio SSH en múltiples servidores. Su uso es 
especialmente recomendable en entornos donde la administración se realiza mediante
herramientas de orquestación o en sistemas expuestos a Internet.

Como buena práctica, se recomienda realizar auditorías periódicas de los servicios
expuestos, y mantener medidas adicionales como autenticación multifactor (MFA) o
VPN para el acceso remoto.
