# Configuración automatizada de SSH con Active Directory en Debian/Ubuntu (realmd + SSSD)

- Link: https://binariocero.com/linux/configuracion-automatizada-de-ssh-con-active-directory-en-debian-ubuntu-realmd-sssd
- Published: 2025-08-10T11:57:42+02:00
- Author: Juan José Fernández Durán

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

Este script automatiza la unión de un sistema Debian/Ubuntu a un dominio de Active
Directory y habilita el inicio de sesión por SSH con cuentas del dominio utilizando`
realmd` y `sssd`. Realiza la instalación de paquetes necesarios (`realmd`, `sssd`,`
adcli`, etc.), une el equipo al dominio, configura PAM para la creación automática
de home directories y ajusta `sshd` para permitir el acceso de usuarios/grupos del
dominio. Está pensado para entornos donde se requiere control centralizado de identidades
y políticas, manteniendo la autenticación delegada en AD.

**Requisitos previos**

 * DNS del equipo resolviendo correctamente el dominio AD (SRV de Kerberos).
 * Hora sincronizada (NTP).
 * Usuario de AD con permisos para unir equipos al dominio.
 * Ejecución del script como **root**.
 * Variables a personalizar en el script: `DOMINIO` y `USUARIO_AD`.

**Qué hace el script**

 * Instala y verifica dependencias (`realmd`, `sssd`, `libnss-sss`, `libpam-sss`,`
   adcli`, `samba-common`, `oddjob`, `oddjob-mkhomedir`, `packagekit`, `krb5-user`).
 * Descubre y une el equipo al dominio (`realm discover`, `realm join`).
 * Configura PAM para crear directorios home automáticamente (`pam_mkhomedir`).
 * Ajusta `sshd_config` para usar PAM y permitir acceso a grupos del dominio.
 * Reinicia servicios (`sssd` y `ssh`) y valida la unión con `realm list`.

**Uso básico**

 1. Edita `DOMINIO` (p. ej., `midominio.local`) y `USUARIO_AD` (p. ej., `Administrador`).
 2. Ejecuta el script como `root`.
 3. Verifica con `realm list` e intenta `id "DOMINIO\\usuario"` y acceso SSH.

    ```wp-block-code
    #!/bin/bash

    set -e

    DOMINIO="midominio.local"
    USUARIO_AD="Administrador"
    REALM="${DOMINIO^^}"  # convierte a mayúsculas
    HOSTNAME_ACTUAL=$(hostname -f)

    echo "[INFO] Instalando paquetes necesarios..."
    apt update
    apt install -y realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common oddjob oddjob-mkhomedir packagekit krb5-user

    echo "[INFO] Comprobando resolución DNS para el dominio..."
    if ! host -t SRV _kerberos._tcp.${DOMINIO} > /dev/null; then
        echo "[ERROR] No se pudo resolver el dominio Kerberos (${DOMINIO}). Revisa la configuración DNS."
        exit 1
    fi

    echo "[INFO] Uniendo el sistema al dominio AD (${DOMINIO})..."
    realm discover "${DOMINIO}"
    echo "[INFO] Se te pedirá la contraseña del usuario AD '${USUARIO_AD}'..."
    realm join --user="${USUARIO_AD}" "${DOMINIO}"

    echo "[INFO] Verificando unión al dominio..."
    realm list

    echo "[INFO] Configurando SSSD y PAM para inicio de sesión con usuarios del dominio..."
    authselect select sssd --force || true  # en Ubuntu no existe, pero en RHEL sí

    # Asegurar que se permite el inicio de sesión de usuarios del dominio
    realm permit --all

    echo "[INFO] Configurando creación automática de directorios home..."
    pam_file="/etc/pam.d/common-session"
    if ! grep -q "pam_mkhomedir.so" "$pam_file"; then
        echo "session required pam_mkhomedir.so skel=/etc/skel umask=0077" >> "$pam_file"
    fi

    echo "[INFO] Configurando SSH para permitir usuarios del dominio..."
    sshd_config="/etc/ssh/sshd_config"

    # Habilitar login por nombre completo (DOMINIO\\usuario)
    if ! grep -q "^UsePAM yes" "$sshd_config"; then
        echo "UsePAM yes" >> "$sshd_config"
    fi

    # Asegurar que se permite el login de usuarios del dominio
    if ! grep -q "^AllowGroups" "$sshd_config"; then
        echo "AllowGroups domain^users@${REALM}" >> "$sshd_config"
    fi

    echo "[INFO] Reiniciando servicios..."
    systemctl restart sssd
    systemctl restart ssh

    echo "[INFO] Configuración completada. Prueba a conectarte vía SSH con un usuario del dominio:"
    echo "  ssh 'DOMINIO\\usuario@${HOSTNAME_ACTUAL}'"
    ```

### FUNCIONALIDAD

Este script:

 1. Instala los paquetes necesarios (`sssd`, `realmd`, `adcli`, `samba-common`, `oddjob`,
    etc.).
 2. Configura `realmd` para unir el sistema a un dominio AD.
 3. Configura `sssd`, `PAM`, y `SSH` para permitir el login de usuarios AD.
 4. Permite acceso SSH a usuarios del dominio.
 5. Crea home directories automáticos para usuarios AD.

### REQUISITOS

 * El sistema debe tener resolución DNS funcional hacia el dominio AD.
 * El reloj debe estar sincronizado (usa NTP).
 * Debes ejecutar este script como **root**.
 * Debes conocer:
    - El nombre del dominio AD (por ejemplo: `midominio.local`)
    - Un usuario AD con permisos para unir el equipo al dominio.

### PRUEBA POSTERIOR

Una vez ejecutado el script, prueba lo siguiente:

    ```wp-block-preformatted
    id "DOMINIO\\usuario"
    ```

Y para conectarte por SSH:

    ```wp-block-preformatted
    ssh 'DOMINIO\\usuario'@ip_del_servidor
    ```
