Automatización de la configuración de sincronización horaria en sistemas Linux con NTP o Chrony

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

En entornos empresariales, la correcta sincronización horaria de los sistemas es crucial para mantener la coherencia en registros, autenticaciones, y procesos distribuidos. Este artículo presenta dos scripts automatizados, uno para sistemas Debian/Ubuntu y otro para CentOS/RHEL, que detectan si el sistema usa NTP o Chrony y configuran el servicio adecuadamente utilizando un servidor de tiempo genérico (time.example.com).

¿Qué hacen los scripts?

Ambos scripts:

  • Detectan automáticamente si está instalado NTP o Chrony.
  • Configuran el archivo correspondiente (ntp.conf o chrony.conf) desactivando las entradas existentes y añadiendo el nuevo servidor.
  • Habilitan y reinician el servicio.
  • Verifican el estado de sincronización.

Script para Debian/Ubuntu

#!/bin/bash

DC_SERVER="time.example.com"
NTP_CONF="/etc/ntp.conf"
CHRONY_CONF="/etc/chrony/chrony.conf"

check_installed() {
dpkg -l | grep -qw "$1"
}

configure_ntp() {
echo "Configurando NTP..."
sed -i 's/^server/#server/g' $NTP_CONF
echo "server $DC_SERVER iburst" >> $NTP_CONF
cat <<EOF >> $NTP_CONF

restrict default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
EOF
systemctl enable ntp
systemctl restart ntp
}

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 "Comprobando si NTP o Chrony están instalados..."

if check_installed ntp; then
echo "NTP ya está instalado."
configure_ntp
elif check_installed chrony; then
echo "Chrony ya está instalado."
configure_chrony
else
echo "No hay NTP ni Chrony. Instalando NTP..."
apt update && apt install -y ntp
configure_ntp
fi

echo "Verificando sincronización..."
timedatectl status
ntpq -p || chronyc sources -v

Script para CentOS/RHEL

#!/bin/bash

DC_SERVER="time.example.com"
NTP_CONF="/etc/ntp.conf"
CHRONY_CONF="/etc/chrony.conf"

check_installed() {
rpm -q "$1" &>/dev/null
}

configure_ntp() {
echo "Configurando NTP..."
sed -i 's/^server/#server/g' $NTP_CONF
echo "server $DC_SERVER iburst" >> $NTP_CONF
cat <<EOF >> $NTP_CONF

restrict default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
EOF
systemctl enable ntpd
systemctl restart ntpd
}

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 "Comprobando si NTP o Chrony están instalados..."

if check_installed ntp; then
echo "NTP ya está instalado."
configure_ntp
elif check_installed chrony; then
echo "Chrony ya está instalado."
configure_chrony
else
echo "No hay NTP ni Chrony. Instalando NTP..."
yum install -y ntp
configure_ntp
fi

echo "Verificando sincronización..."
timedatectl status
ntpq -p || chronyc sources -v

Consideraciones finales

  • Puedes reemplazar time.example.com por un servidor NTP corporativo o uno público como pool.ntp.org.
  • Es recomendable abrir los puertos UDP 123 si existen restricciones de firewall.
  • En sistemas modernos, se recomienda Chrony por su mayor precisión y rapidez de convergencia, especialmente en entornos virtualizados.

Estos scripts son útiles en despliegues automatizados, entornos de configuración masiva o como parte de sistemas de provisión como Ansible o scripts de inicio.

Binario 0
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.