🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Cómo cambiar la zona horaria en Linux por SSH

Actualizado el 20 de octubre de 2025

¿Por qué es importante configurar bien la zona horaria en tu servidor?

Cuando gestionas un servidor Linux, la hora es uno de esos detalles que parecen menores hasta que algo falla. Los registros del sistema (logs), las tareas programadas con cron, los certificados SSL y hasta el envío de correos electrónicos dependen de que el reloj del sistema esté sincronizado y configurado en la zona horaria correcta. Si tu servidor está en la nube, es muy probable que venga configurado por defecto en UTC (Tiempo Universal Coordinado), lo que puede causar confusiones si tú te encuentras en otro huso horario.

En esta guía, te voy a explicar paso a paso cómo cambiar la zona horaria en Linux por SSH, ya sea que uses un sistema con systemd (la mayoría de distribuciones modernas como Ubuntu, Debian, CentOS 8+ o Rocky Linux) o un sistema más antiguo con SysVinit. No necesitas ser un experto, solo seguir las instrucciones con calma.

Vamos a empezar con lo básico y luego avanzaremos hacia métodos más avanzados. Al final, tendrás tu servidor mostrando la hora exacta de tu ciudad, y tus logs tendrán mucho más sentido.

Paso 0: Conectarte por SSH a tu servidor

Antes de cambiar nada, necesitas acceder a tu servidor. Abre tu terminal (si usas Windows, puedes usar PowerShell, CMD o un cliente como PuTTY) y escribe:

ssh usuario@tu-servidor.com

Reemplaza usuario con tu nombre de usuario (normalmente root o un usuario con permisos sudo) y tu-servidor.com con la IP o dominio de tu máquina. Te pedirá una contraseña o una clave SSH, según cómo lo hayas configurado.

Una vez dentro, verás el prompt del sistema. Ahora sí, vamos a trabajar.

Paso 1: Verificar la zona horaria actual

Lo primero es saber en qué zona horaria estás ahora mismo. Ejecuta este comando:

timedatectl

Este comando te mostrará información detallada, incluyendo:

  • Hora local
  • Hora universal (UTC)
  • Zona horaria activa (por ejemplo, Etc/UTC o America/Mexico_City)
  • Si el reloj está sincronizado con un servidor NTP

Otra forma rápida de ver solo la zona horaria es:

cat /etc/timezone

Este archivo contiene una línea con el nombre de la zona (en sistemas Debian/Ubuntu). En CentOS o RHEL, puedes usar:

cat /etc/sysconfig/clock

Pero no te preocupes demasiado por los archivos de configuración; el comando timedatectl es la herramienta moderna y universal.

Paso 2: Listar todas las zonas horarias disponibles

Para cambiar la zona horaria, necesitas saber el nombre exacto de la que quieres usar. Linux utiliza la base de datos de zonas horarias de IANA (también conocida como tzdata). Para listar todas las opciones:

timedatectl list-timezones

Verás una salida enorme con nombres como:

  • Europe/Madrid
  • America/Bogota
  • America/Argentina/Buenos_Aires
  • Asia/Tokyo
  • Australia/Sydney

Si quieres filtrar por una región específica, puedes usar grep. Por ejemplo, para ver todas las zonas de América del Sur:

timedatectl list-timezones | grep America

O para buscar una ciudad concreta:

timedatectl list-timezones | grep Madrid

Esto te facilitará encontrar la zona exacta sin tener que revisar la lista completa.

Paso 3: Cambiar la zona horaria (método fácil con systemd)

Este es el método más sencillo y funciona en la mayoría de los servidores modernos. Solo necesitas usar timedatectl con el nombre de la zona que elegiste.

Por ejemplo, si quieres configurar la hora de Madrid:

sudo timedatectl set-timezone Europe/Madrid

Si tu usuario no es root, necesitarás sudo. Si eres root directamente, puedes omitirlo. Después de ejecutar el comando, verifica que el cambio se haya aplicado:

timedatectl

Ahora deberías ver algo como:

Local time: jue 2025-01-16 14:32:10 CET
Universal time: jue 2025-01-16 13:32:10 UTC
RTC time: jue 2025-01-16 13:32:10
Time zone: Europe/Madrid (CET, +0100)

¡Listo! Has cambiado la zona horaria en Linux por SSH en menos de un minuto.

[TIP] Si no ves el cambio reflejado al instante, puede que tu terminal esté usando una sesión con variables de entorno antiguas. Cierra la sesión SSH y vuelve a entrar para ver la hora local correcta.

Paso 4: Método alternativo (enlazando archivos)

En sistemas que no usan systemd (como CentOS 6 o distribuciones muy antiguas), el comando timedatectl no existe. Pero no te preocupes, hay un método clásico que funciona siempre: enlazar el archivo de zona horaria.

La zona horaria se define en el archivo /etc/localtime, que normalmente es un enlace simbólico a un archivo dentro de /usr/share/zoneinfo/. Para cambiarlo manualmente:

  1. Elimina el enlace actual:
sudo rm /etc/localtime
  1. Crea un nuevo enlace apuntando a la zona deseada:
sudo ln -s /usr/share/zoneinfo/Europe/Madrid /etc/localtime
  1. Verifica:
date

Este método es útil cuando estás en un contenedor o un sistema mínimo que no tiene timedatectl instalado.

[WARNING] Asegúrate de que la ruta /usr/share/zoneinfo/Europe/Madrid exista. Puedes comprobarlo con ls /usr/share/zoneinfo/Europe/. Si no existe, el enlace se creará roto y el sistema no sabrá qué hora es.

Paso 5: Sincronizar la hora con servidores NTP

Cambiar la zona horaria solo ajusta la visualización de la hora, pero no corrige el reloj interno. Si tu servidor tiene la hora desfasada, necesitas sincronizarlo con un servidor de tiempo (NTP). La mayoría de los sistemas tienen systemd-timesyncd activo por defecto, pero puedes verificarlo:

timedatectl status

Fíjate en la línea NTP synchronized. Si dice yes, todo está bien. Si dice no o inactive, actívalo:

sudo timedatectl set-ntp true

También puedes instalar ntp o chrony para una sincronización más avanzada, pero para la mayoría de los casos, systemd-timesyncd es suficiente.

Si quieres ver la lista de servidores NTP configurados, edita el archivo:

sudo nano /etc/systemd/timesyncd.conf

Descomenta la línea NTP= y añade servidores como 0.pool.ntp.org o time.google.com. Luego reinicia el servicio:

sudo systemctl restart systemd-timesyncd

Paso 6: Configurar la zona horaria en contenedores Docker

Si tu servidor usa Docker, cada contenedor tiene su propia zona horaria, independiente del host. Para configurarla en un contenedor, tienes varias opciones:

Opción A: Al crear el contenedor, pasa la variable de entorno:

docker run -e TZ=Europe/Madrid tu-imagen

Opción B: Si el contenedor ya existe, puedes montar el archivo de zona horaria del host:

docker run -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro tu-imagen

Opción C: Entrar al contenedor y cambiar la zona manualmente:

docker exec -it nombre-contenedor bash

Y dentro, ejecutar los comandos que ya vimos (timedatectl o la creación del enlace simbólico).

[INFO] Muchas imágenes oficiales de Docker incluyen tzdata pero no siempre está configurado. Si el comando timedatectl no funciona dentro del contenedor, usa el método del enlace simbólico.

Paso 7: Configurar la zona horaria en paneles de control (Syspanel)

Si tu servidor utiliza un panel de control como Syspanel (antes conocido como HestiaCP), es probable que quieras que la hora del panel coincida con la del sistema. Syspanel se administra a través del puerto 2106, pero la zona horaria se hereda del sistema operativo.

Para asegurarte de que Syspanel muestre la hora correcta:

  1. Cambia la zona horaria del sistema como te mostré en los pasos anteriores.
  2. Reinicia el servicio de Syspanel para que tome los cambios:
sudo systemctl restart syspanel

O si usas el comando específico del panel:

sudo v-change-sys-config timezone Europe/Madrid

Después de esto, inicia sesión en Syspanel accediendo a https://tu-servidor.com:2106 y verifica que la hora en el panel sea la correcta.

[TIP] Si tienes usuarios que acceden a Syspanel desde diferentes países, recuerda que la zona horaria del panel es global, no se puede configurar por usuario. Cada usuario deberá hacer la conversión mentalmente o usar las opciones de visualización del panel si las tiene.

Paso 8: Verificar que todo funciona correctamente

Después de cambiar la zona horaria, es importante hacer algunas comprobaciones:

  1. Hora del sistema:
date
  1. Hora en los logs:
tail -f /var/log/syslog

Los mensajes deberían mostrar la hora local, no UTC.

  1. Tareas cron:
crontab -l

Revisa que las horas programadas tengan sentido con la nueva zona. Por ejemplo, si tenías una tarea a las 3:00 AM UTC, ahora se ejecutará a las 3:00 AM hora local, lo que puede ser un cambio de comportamiento.

  1. Sincronización NTP:
timedatectl status

Asegúrate de que NTP synchronized sea yes.

Errores comunes y cómo solucionarlos

Error: "Failed to set time zone: Failed to update /etc/localtime"

Esto suele ocurrir por permisos insuficientes. Asegúrate de usar sudo o de ser root.

Error: "The system is not registered with an authorized time server"

Esto indica que el servicio NTP no está activo. Ejecuta:

sudo timedatectl set-ntp true

La hora cambia pero se revierte al reiniciar

Si el cambio no persiste, es posible que tengas un servicio que sobrescribe la zona horaria. Revisa los scripts de inicio o los archivos de configuración de tu proveedor de hosting. En algunos VPS, el panel de control puede forzar UTC.

Preguntas frecuentes (FAQ)

¿Qué diferencia hay entre UTC y GMT?

UTC es el estándar de tiempo atómico, mientras que GMT es una zona horaria específica (Reino Unido). En la práctica, para configurar un servidor, son equivalentes. La base de datos tzdata usa UTC como referencia.

¿Puedo tener dos zonas horarias en el mismo servidor?

El sistema operativo solo puede tener una zona horaria global. Sin embargo, puedes ejecutar aplicaciones con una zona horaria diferente usando variables de entorno como TZ por proceso. Por ejemplo:

TZ=America/New_York date

¿Cómo afecta la zona horaria a los certificados SSL?

Los certificados SSL tienen una fecha de expiración que se valida contra la hora del sistema. Si tu servidor tiene la hora incorrecta, podrías ver errores de "certificado expirado" o "no válido aún". Por eso es crucial mantener la hora sincronizada.

¿Debo usar UTC o mi zona local?

Para servidores, muchos administradores prefieren UTC porque evita confusiones con el horario de verano y facilita la coordinación entre servidores en diferentes países. Sin embargo, si eres el único administrador y te resulta más cómodo, usa tu zona local. Lo importante es que los logs y las tareas programadas sean consistentes.

¿Cómo cambio la zona horaria en un servidor sin systemd?

Usa el método del enlace simbólico que expliqué en el Paso 4. Es compatible con cualquier distribución Linux.

Conclusión

Cambiar la zona horaria en Linux por SSH es una tarea sencilla que cualquier administrador de sistemas debería saber hacer. Con el comando timedatectl puedes hacerlo en segundos, y si tu sistema es antiguo, el método del enlace simbólico es tu aliado.

Recuerda siempre verificar la sincronización NTP después del cambio, y si usas un panel como Syspanel (puerto 2106), reinicia sus servicios para que la hora se actualice correctamente.

Con estos pasos, tu servidor estará mostrando la hora correcta, tus logs serán más fáciles de leer y tus tareas programadas se ejecutarán cuando realmente esperas. Si tienes alguna duda, consulta la documentación oficial de tu distribución o contacta con tu proveedor de hosting. ¡A configurar esa hora!

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel