La correcta sincronización del tiempo en los servidores es esencial para garantizar la coherencia en logs, autenticaciones, servicios distribuidos y tareas programadas. Chrony es una alternativa moderna y eficiente a NTP (Network Time Protocol) tradicional, recomendada por muchas distribuciones Linux como sincronizador por defecto.
En este artículo presentamos dos scripts Bash diseñados para automatizar la instalación, configuración y verificación de Chrony, reemplazando cualquier instancia previa de NTP, tanto en sistemas basados en Debian/Ubuntu como en CentOS/RHEL. Los scripts utilizan como servidor de tiempo principal el servicio público confiable time.cloudflare.com
.
Script para Debian/Ubuntu con Chrony
Este script:
- Elimina cualquier instalación previa de NTP.
- Instala Chrony si no está presente.
- Configura Chrony para usar el servidor
time.cloudflare.com
. - Habilita y reinicia el servicio.
- Muestra el estado de sincronización.
#!/bin/bash
DC_SERVER="time.cloudflare.com"
CHRONY_CONF="/etc/chrony/chrony.conf"
check_installed() {
dpkg -l | grep -qw "$1"
}
remove_ntp_if_exists() {
if check_installed ntp; then
echo "Eliminando NTP..."
systemctl stop ntp
systemctl disable ntp
apt remove --purge -y ntp
fi
}
install_chrony() {
echo "Instalando Chrony..."
apt update && apt install -y chrony
}
configure_chrony() {
echo "Configurando Chrony..."
sed -i 's/^pool/#pool/g' $CHRONY_CONF
sed -i 's/^server/#server/g' $CHRONY_CONF
echo "server $DC_SERVER iburst" >> $CHRONY_CONF
systemctl enable chrony
systemctl restart chrony
}
echo "Preparando sistema para usar Chrony..."
remove_ntp_if_exists
if check_installed chrony; then
echo "Chrony ya está instalado."
else
install_chrony
fi
configure_chrony
# Verificación
echo "Verificando sincronización..."
timedatectl status
chronyc tracking
chronyc sources -v
Script para CentOS/RHEL con Chrony
Este script realiza la misma función adaptada al entorno de paquetes RPM (CentOS/RHEL).
#!/bin/bash
DC_SERVER="time.cloudflare.com"
CHRONY_CONF="/etc/chrony.conf"
check_installed() {
rpm -q "$1" &>/dev/null
}
remove_ntp_if_exists() {
if check_installed ntp; then
echo "Eliminando NTP..."
systemctl stop ntpd
systemctl disable ntpd
yum remove -y ntp
fi
}
install_chrony() {
echo "Instalando Chrony..."
yum install -y chrony
}
configure_chrony() {
echo "Configurando Chrony..."
sed -i 's/^pool/#pool/g' $CHRONY_CONF
sed -i 's/^server/#server/g' $CHRONY_CONF
echo "server $DC_SERVER iburst" >> $CHRONY_CONF
systemctl enable chronyd
systemctl restart chronyd
}
echo "Preparando sistema para usar Chrony..."
remove_ntp_if_exists
if check_installed chrony; then
echo "Chrony ya está instalado."
else
install_chrony
fi
configure_chrony
# Verificación
echo "Verificando sincronización..."
timedatectl status
chronyc tracking
chronyc sources -v
Consideraciones Finales
- Servidor NTP utilizado: En ambos scripts se ha configurado
time.cloudflare.com
, un servidor NTP confiable y de baja latencia. Puede reemplazarse fácilmente por cualquier otro servidor, ya sea público o interno. - Seguridad: Aunque Chrony es seguro por diseño, siempre es recomendable aplicar restricciones en redes productivas para evitar sincronizaciones no autorizadas.
- Automatización: Estos scripts son ideales para ser usados en configuraciones automáticas vía Ansible, scripts de provisión o plantillas de imágenes.