Cambiar la contraseña del admin de DirectAdmin desde la consola

Cómo cambiar la contraseña del usuario admin de DirectAdmin desde la consola del servidor, de forma segura y comprobando que el cambio funciona.

Por qué no basta con lo que dicen muchas guías

Muchas guías de Internet resuelven esto con passwd admin. Ese comando cambia la contraseña del usuario del sistema operativo, pero no es el mecanismo del panel: en nuestros servidores, con versiones actuales de DirectAdmin, no sirve para entrar en el panel con la contraseña nueva. Y la herramienta de línea de comandos de DirectAdmin (da) no tiene ninguna orden para cambiar contraseñas.

El camino que sí funciona es el del propio panel: su API, con la llamada CMD_API_USER_PASSWD. Es la misma operación que haces desde la interfaz web, pero lanzada desde la consola.

Tampoco sirve entrar con un enlace de acceso directo (da login-url) para cambiarla desde la web: el formulario de contraseña pide la actual, que es justo la que no tienes.

Lo que hace el script

Funciona con contraseñas que lleven símbolos (&, +, =, comillas…).

Uso

Como root en el servidor:

  1. Crea el fichero /root/da-admin-passwd.sh con el contenido del final de esta página.
  2. Ejecútalo:
bash /root/da-admin-passwd.sh

Debe responder dos cosas:

No pegues el código en la consola

Ejecuta el script como fichero. Si pegas el bloque directamente en la consola, las órdenes que piden la contraseña se quedan con las líneas siguientes del pegado como si fueran lo que has tecleado, y el resultado es imprevisible. Si ya te ha pasado y la consola se ha quedado con un > esperando, pulsa Ctrl+C.

Si el servidor forma parte de un cluster DNS

Si este servidor recibe zonas DNS de otros servidores DirectAdmin (cluster DNS), esos otros guardan la contraseña del admin de este en su configuración del cluster. Al cambiarla, actualízala también allí; si no, dejarán de poder enviarle zonas.

El script

#!/bin/bash
# Change the DirectAdmin admin password through the panel API.
# Run as root on the DA host: bash /root/da-admin-passwd.sh
# The password is read hidden, never echoed, never placed on a command line.
set -u
umask 077
read -rsp "Nueva contraseña admin: " P1; echo
read -rsp "Repítela: " P2; echo
if [ -z "$P1" ] || [ "$P1" != "$P2" ]; then
  echo "Vacía o no coinciden. No cambio nada."; exit 1
fi
T=$(mktemp -d)
trap 'rm -rf "$T"' EXIT
P="$P1" python3 -c 'import os,urllib.parse as u;p=os.environ["P"];print(u.urlencode({"username":"admin","passwd":p,"passwd2":p}),end="")' > "$T/body"
R=$(curl -sk "$(da api-url --user=admin)/CMD_API_USER_PASSWD" --data @"$T/body")
echo "Respuesta del panel: $(printf '%s' "$R" | python3 -c 'import sys,urllib.parse as u;print(u.unquote_plus(sys.stdin.read()))')"
PORT=$(da config-get port)
P="$P1" python3 -c 'import os;print("user = \"admin:%s\"" % os.environ["P"].replace("\\","\\\\").replace("\"","\\\""))' > "$T/cfg"
curl -sk -K "$T/cfg" -o /dev/null -w "Prueba de login con la nueva: HTTP %{http_code}\n" "https://127.0.0.1:${PORT}/CMD_API_LOGIN_TEST"

Requisitos: DirectAdmin con la orden da (versiones actuales), curl y python3, que vienen en cualquier instalación estándar.


Revision #2
Created 2026-10-28 08:57:35 UTC by Abkrim
Updated 2026-10-28 09:01:32 UTC by Abkrim