Qué es y qué obtendrás: El hostname es el nombre del equipo que usan el kernel y servicios para identificarse en la red y en mensajes locales. En esta guía práctica aprenderás a cambiar hostname en Ubuntu 24.04 de forma correcta y persistente, actualizar /etc/hosts para evitar errores, y cómo impedir que cloud-init o el proveedor lo vuelvan a sobrescribir en reinicios o clonaciones.
Comprobaciones iniciales (qué ver antes de tocar nada)
- Hostname actual:
hostname - FQDN (si existe):
hostname -f - Estado systemd:
hostnamectl status(muestra static, transient y pretty). - Ficheros:
cat /etc/hostnameyhead -n 5 /etc/hostspara ver entradas locales. - Si la máquina es cloud/VPS, comprueba si existe
/etc/cloud/cloud.cfgy si cloud-init está instalado (puede gestionar hostname/hosts).
Requisitos previos
Acceso con sudo o root. En máquinas de producción o plantillas, haz snapshot o copia antes de cambios masivos. Evita editar /etc/hosts de forma automática en entornos gestionados sin probarlo primero.
Metodo recomendado (CLI): usar hostnamectl
Systemd expone hostnamectl, la forma moderna y segura para cambiar el nombre. Por defecto, sudo hostnamectl set-hostname nuevo-nombre aplicará los tres tipos (static, transient y pretty) si el formato lo permite. Recomendado para establecer un nombre persistente es cambiar el static:
sudo hostnamectl set-hostname --static mi-host
Si quieres un nombre legible para humanos (con espacios y mayúsculas) usa --pretty además:
sudo hostnamectl set-hostname --static --pretty "Mi Servidor 01" mi-host
Explicación breve de los tipos:
- static: guardado en /etc/hostname; prioridad alta, persistente tras reinicios.
- transient: nombre temporal en el kernel; puede venir de DHCP o cloud-init.
- pretty: etiqueta para mostrar a humanos; no usada para resolución DNS.
Actualizar /etc/hosts para evitar errores de resolución
Tras cambiar el hostname actualiza /etc/hosts para que el nuevo nombre tenga una entrada local y evitar errores como sudo: unable to resolve host …. Un ejemplo común:
127.0.0.1 localhost
127.0.1.1 mi-host.mi-dominio mi-host
Edita con tu editor favorito o con comandos seguros:
sudo cp /etc/hosts /etc/hosts.bak
sudo sed -i "/127.0.1.1/d" /etc/hosts
printf "127.0.1.1\tmi-host.mi-dominio mi-host\n" | sudo tee -a /etc/hosts
Asegúrate de reemplazar mi-host y mi-dominio por tus valores reales. No elimines la entrada de 127.0.0.1 localhost.
Casos especiales: imágenes cloud, VPS y plantillas
En imágenes cloud (Azure/GCP/OpenStack/OVH, etc.) cloud-init normalmente puede gestionar el hostname al arranque. En algunas imágenes, si no existe /etc/hostname, cloud-init recreará o impondrá el nombre del proveedor en cada reinicio.
Si trabajas con plantillas o clones, lo adecuado es que el primer arranque reciba un hostname único vía cloud-init (user-data) o que tus scripts de provisioning lo establezcan y creen /etc/hostname para evitar que vuelva a la plantilla.
Cómo evitar que cloud-init o el proveedor reemplacen el nombre
La forma más robusta es crear un fichero de override en /etc/cloud/cloud.cfg.d/ que indique a cloud-init que preserve el hostname y/o deje de gestionar /etc/hosts. Ejemplo seguro:
# /etc/cloud/cloud.cfg.d/99-preserve-hostname.cfg
preserve_hostname: true
manage_etc_hosts: false
Con esto cloud-init no sobrescribirá /etc/hostname y no tocará /etc/hosts en futuros arranques. Alternativamente, asegúrate de que /etc/hostname existe con el nombre deseado; en sistemas systemd, crear ese fichero suele hacer que cloud-init no gestione el nombre de forma persistente.
Cambiar hostname en escritorios (GNOME) y con NetworkManager
En escritorios GNOME puedes cambiarlo desde Ajustes → Información; sin embargo, el CLI (hostnamectl) sigue siendo válido y recomendable para coherencia. NetworkManager o DHCP pueden modificar el transient hostname si no existe un static válido; por eso siempre establece el static si quieres persistencia.
Verificación y pruebas
- Comprobar estado systemd:
hostnamectl status. - Short name:
hostname. - FQDN:
hostname -f(depende de /etc/hosts o DNS). - Contenido persistente:
cat /etc/hostname. - Comprobar /etc/hosts:
grep mi-host /etc/hosts. - Logs:
journalctl -u systemd-hostnamed --since "5 minutes ago"para ver cambios y errores.
Buenas prácticas de nombres (RFC/RFC1123)
- Usa minúsculas, letras, números y guiones (-). Evita guiones iniciales/finales y guiones bajos.
- Etiqueta (cada parte entre puntos) máximo 63 caracteres; FQDN total máximo 255.
- No uses espacios ni caracteres especiales; evita mayúsculas si quieres portabilidad.
Solución de problemas comunes
- sudo: unable to resolve host — falta la entrada en /etc/hosts. Solución: añadir 127.0.1.1 con el nuevo nombre.
- Nombre revertido tras reiniciar — cloud-init o proveedor reescriben. Solución: crear override en /etc/cloud/cloud.cfg.d/ con
preserve_hostname: trueo inyectar hostname vía cloud-init user-data. - Clonación de VMs — si multiple equipos comparten hostname, actualízalo en el primer arranque y elimina snapshots/plantillas con nombres duplicados; usa cloud-init para personalizar cada clon.
Ejemplo práctico: pasos seguros copy-paste
- Comprobar estado inicial:
hostnamectl status hostname hostname -f cat /etc/hostname || true head -n 5 /etc/hosts - Establecer static hostname:
sudo hostnamectl set-hostname --static mi-host - Crear /etc/hosts entry segura:
sudo cp /etc/hosts /etc/hosts.bak sudo sed -i "/127.0.1.1/d" /etc/hosts printf "127.0.1.1\tmi-host.mi-dominio mi-host\n" | sudo tee -a /etc/hosts - Si es cloud/VPS, evitar sobrescrituras:
sudo tee /etc/cloud/cloud.cfg.d/99-preserve-hostname.cfg <<'EOF' preserve_hostname: true manage_etc_hosts: false EOF - Verificar:
hostnamectl status hostname hostname -f cat /etc/hostname grep mi-host /etc/hosts
Si prefieres una guía sobre actualizaciones y snapshots previas a cambios en servidores o plantillas, consulta el artículo sobre cómo actualizar Ubuntu 24.04 desde terminal. Para entornos de virtualización local y clonación, puede ser útil leer la guía sobre clonar una máquina virtual en VirtualBox y cambiar su UUID.
Resumen y checklist final
- Usa
hostnamectlpara cambiar el nombre; prefiere--staticpara persistencia. - Actualiza /etc/hosts para evitar errores de resolución local.
- En imágenes cloud, evita sobrescrituras con
preserve_hostname: trueo asegurando /etc/hostname existe. - Comprueba con
hostnamectl status,hostnameyhostname -f. - Respaldos: copia /etc/hosts antes de modificarlo y prueba en entornos no críticos antes de aplicar en producción.
Preguntas frecuentes
- ¿Puedo usar guiones bajos en el hostname? No se recomienda; RFC1123 no los admite en nombres DNS normales y pueden generar problemas.
- ¿Es suficiente crear /etc/hostname manualmente? Sí, en sistemas systemd tener /etc/hostname con el nombre deseado suele hacer el cambio persistente, pero en entornos cloud cloud-init puede reescribirlo salvo que configures preserve_hostname.
- ¿Y si quiero cambiar muchos hostnames automáticamente? Usa cloud-init user-data al desplegar instancias o herramientas de configuración (Ansible, cloud-init templates) para gestionar hostname y /etc/hosts de forma reproducible.
Si necesitas que te adapte los comandos a un ejemplo concreto (nombre, dominio o proveedor cloud), dime el caso y te doy los pasos listos para copiar y pegar.
