Configurando data e hora em servidor atrás de firewall com porta NTP bloqueada

Publicado por Thomas Pirajá Hansen em 05/10/2012

[ Hits: 11.708 ]

 


Configurando data e hora em servidor atrás de firewall com porta NTP bloqueada



Essa dica é para quem tem um servidor GNU/Linux rodando atrás de um firewall que bloqueie a porta 123 (NTP).

Por padrão, o GNU/Linux é capaz de sincronizar o relógio interno do seu computador via protocolo NTP (você pode configurar isso para ser automático utilizando o comando ntpdate - há diversos tutoriais para isso na rede).

Além disso, atualizar a data e hora costuma não ser muito crítico - exceto quando você está rodando o seu servidor em ambiente de virtualização.

Explico: Dependendo da solução de virtualização adotada, quando você suspende uma máquina, ela também suspende o RELÓGIO dela, de forma que, quando ela volta ao ar, está com a data e hora de quando foi desligada!

O que fazer nessa hora? Bom, você tem duas alternativas básicas:

1 - Corrigir a data manualmente, via sudo date -s, toda vez que você reativar a sua VM com GNU/Linux;
2 - Seguir esta dica! :D

Bom, esta solução é baseada em texto. Primeiro, vamos usar Wget, grep e sed, para obter a hora do servidor da Google:

wget -S --spider "http://www.google.com/" 2>&1 | grep -E -m1 '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'

Não vou explicar detalhadamente o que o comando a seguir faz, mas de uma forma geral, é:
  • Resgata o index da Google;
  • Acha a linha que tem a data e hora do sistema;
  • Limpa essa linha, deixando apenas a data e a hora do sistema.

OK, testou bonitinho? Já sabe que funciona? Então, vamos utilizar essa linha como input no comando date -s, para atualizar o relógio do sistema!

Lembrando que você precisa de permissões de superusuário para isso, então, vamos utilizar o sudo:

sudo date -s "`wget -S --spider "http://www.google.com/" 2>&1 | grep -E -m1 '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'`"

O shell vai pedir a senha de seu usuário privilegiado, e atualizar a data do sistema. Fácil, né?

Então, a penúltima parte: Vamos deixar isso automatizado no boot! digite:

sudo nano /etc/rc.local

Edite o arquivo, copiando a seguinte linha ANTES do comando: exit 0

date -s "`wget -S --spider "http://www.google.com/" 2>&1 | grep -E -m1 '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'`"


Note que aqui, você não precisa de sudo, já que o script "rc.local" é executado como superusuário.

Agora, seu computador atualiza a hora toda vez que você o reinicia!

Só faltou uma coisa: O caso das VMs! Bom, aí você tem que criar uma regrinha no Crontab, para que o comando seja executado automaticamente a cada 5 ou 10 minutos, e assim, manter o sistema atualizado.

Bom, para isso, você precisa configurar o Crontab do superusuário, e não o seu! Por isso, vamos invocar o editor de Crontab com sudo:

sudo crontab -e

Obs.: Se ele perguntar qual editor você quer utilizar, selecione o Nano, que é o mais fácil deles.

Vá no fim do arquivo, e digite a seguinte linha:

5 * * * * date -s "`wget -S --spider "http://www.google.com/" 2>&1 | grep -E -m1 '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'`"


Isso vai configurar o seu sistema para, a cada 5 minutos, executar o comando acima e sincronizar o seu sistema!

Boa sorte a todos!

Outras dicas deste autor

Mudando o lado dos ícones do Google Chrome, no Ubuntu

Gitso - Suporte remoto em redes com internet compartilhada

Configurando atalho para terminal no Linux Mint 16 Cinnamon

Corrigindo falta de rede em uma Máquina Virtual (VM) Linux copiada

Leitura recomendada

Acertando data/hora no Linux

sources.list (e extras) para o Debian 8.0 Jessie

Slackware Linux com cara de Solaris (Gnome, XFCE e Emerald)

Configurando o teclado Toshiba

HP 1020 no Ubuntu

  

Comentários
[1] Comentário enviado por henriquepk em 08/01/2016 - 18:57h

Não tem como fazer esse comando

5 * * * * date -s "`wget -S --spider "http://www.google.com/" 2>&1 | grep -E -m1 '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'`"


executar em segundos?



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts