59 votes

Comment utiliser ntpdate derrière un proxy ?

Est-il possible d'utiliser ntpdate derrière un proxy HTTP avec authentification ? Si ce n'est pas possible, existe-t-il de bonnes alternatives ?

55voto

Mahesh Velaga Points 9420

Élargir le champ d'action la réponse de carveone :

sudo date -s "$(wget -S  "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//' | head -1l | awk '{print $1, $3, $2,  $5 ,"GMT", $4 }' | sed 's/,//')"

35voto

Udo Points 1356

Cela semble être un cas clair pour tlsdate.

 tlsdate: secure parasitic rdate replacement

  tlsdate sets the local clock by securely connecting with TLS to remote
  servers and extracting the remote time out of the secure handshake. Unlike
  ntpdate, tlsdate uses TCP, for instance connecting to a remote HTTPS or TLS
  enabled service, and provides some protection against adversaries that try
  to feed you malicious time information.

Je ne pense pas avoir déjà vu autant de recommandations pour utiliser des données non nettoyées provenant d'Internet comme argument pour une invocation sudo.

Github : https://github.com/ioerror/tlsdate

23voto

ryenus Points 849

One Liner

Variable d'environnement supposée http_proxy est déjà réglé :

sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"

nous pouvons d'abord vérifier la date et l'heure récupérées :

# local  date/time
date -d "$(curl -HCache-Control:no-cache -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"

# or UTC date/time
date -ud "$(curl -HCache-Control:no-cache -sI google.com | grep '^Date:' | cut -d' ' -f3-6)"    

Notes

Au cas où, certaines options peuvent être nécessaires pour curl :

  • curl -x $proxy

    pour définir explicitement le serveur proxy à utiliser, lorsque l'option http_proxy La variable d'environnement n'est pas définie, la valeur par défaut est le protocole http et le port 1080 ( manuel ).

  • curl -H 'Cache-Control: no-cache'

    de manière explicite désactiver la mise en cache surtout lorsqu'il est utilisé dans une tâche cron et/ou derrière un serveur proxy.

Forme alternative testée avec RHEL 6 qui utilise l'option '-u' pour la date au lieu d'ajouter le "Z" à la sortie :

sudo date -u --set="$(curl -H 'Cache-Control: no-cache' -sD - http://google.com |grep '^Date:' |cut -d' ' -f3-6)"

BTW, google.com est préféré à www.google.com car la première entraîne une 301 la réponse de redirection, qui est beaucoup plus petite ( 569 vs 20k+ caractères), mais il est toujours bon de l'utiliser.

8voto

artificerpi Points 181

Le service NTP utilise le protocole UDP pour synchroniser l'heure. Il se peut donc que le proxy HTTP/TCP ne fonctionne pas pour lui. Alternative à la réponse acceptée, il existe une bonne htpdate outil pour synchroniser le temps derrière un proxy.

Un exemple de tâche cron :

* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org

6voto

KCotreau Points 25345

S'il s'agit uniquement d'un proxy HTTP, il utilise le port 80, donc la réponse de base est non à cette question spécifique. NTP utilise le port UDP 123. S'il s'agit d'un serveur proxy plus générique, desservant tous les ports, alors peut-être.

Il existe des programmes qui font du NTP sur HTTP. Je n'utilise pas Linux, mais celui-ci pourrait le faire :

http://www.rkeene.org/oss/htp/ (je ne suis toujours pas sûr que cela permette l'authentification).

Je n'ai pas pu en trouver un pour Windows, mais je vous en ferai part si j'en trouve un.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X