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?
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?
Réponses:
Cela semble être un cas clair pour cette date.
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 jamais vu autant de recommandations d'utiliser des données non normalisées provenant d'Internet comme argument d'une invocation sudo.
Développer la réponse par 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/,//')"
En supposant que la variable d’environnement http_proxy
soit déjà définie :
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 / heure récupérée:
# 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)"
Juste au cas où, certaines options pourraient être nécessaires pour curl
:
curl -x $proxy
pour définir explicitement le serveur proxy à utiliser, lorsque la http_proxy
variable d'environnement n'est pas définie, par défaut sur protocole http
et port 1080
( manuel ).
curl -H 'Cache-Control: no-cache'
désactiver explicitement la mise en cache , en particulier lorsqu’il est utilisé dans un travail cron et / ou derrière un serveur proxy.
Autre forme testée avec RHEL 6 qui utilise l’option '-u' pour dater 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érable à www.google.com
, car le premier entraîne une 301
réponse de redirection, qui est beaucoup plus petite ( 569
vs 20k+
caractères), mais toujours bon à utiliser.
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
wget
version, bien que je préfère personnellement l’utiliser curl
.
S'il s'agit uniquement d'un proxy HTTP, le port 80 est utilisé. La réponse de base est donc non à cette question. 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.
Certains programmes utilisent NTP sur HTTP. Je n'utilise pas Linux, mais celui-ci pourrait le faire:
http://www.rkeene.org/oss/htp/ (toujours pas sûr si cela fera l'authentification non plus).
Je ne pouvais pas en trouver un pour Windows, mais je le posterais si je le faisais.
Une solution rapide et sale pour les personnes derrière un serveur proxy http:
Mon emplacement est GMT + 4, je peux consulter l’heure actuelle sur le serveur timeapi à l’ adresse http://www.timeapi.org/utc/in+four+hours . Pour plus d’informations , veuillez consulter le site Web correspondant à votre emplacement.
Pour configurer la date et l'heure, je fais:
time sudo date $(wget -O - "http://www.timeapi.org/utc/in+four+hours" 2>/dev/null | sed s/[-T:+]/\ /g | awk '{print $2,$3,$4,$5,".",$6}' | tr -d " " )
Vous pouvez répéter la commande si la commande initiale "time" indique une valeur élevée ...
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
vous n'avez pas besoin de faire attention au fuseau horaire si votre système d'exploitation est configuré correctement. Linux reconnaît le fuseau horaire fourni dans la chaîne et définit l'heure du système de manière appropriée.
Le service NTP utilise le protocole UDP pour synchroniser l'heure. Donc, le proxy HTTP / TCP peut ne pas fonctionner pour cela. Alternative à la réponse acceptée, il existe un bon outil htpdate pour synchroniser le temps derrière le proxy.
Un exemple de travail cron:
* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org
Bien que ntp over http ait été mentionné, je suis surpris que personne ne mentionne le petit utilitaire astucieux htpdate
disponible sur http://www.vervest.org/htp/ . Contrairement aux alternatives, htpdate
fait partie des dépôts par défaut de Debian et Ubuntu et peut être installé avec apt-get
.
Il peut être exécuté en tant que commande ordinaire ou en mode démon en mode silencieux.
En supposant que la http_proxy
variable d'environnement est définie:
wget -S --spider "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'
Ou utiliser curl -I --proxy="..." "http://www.google.com/"
Après tout, si le temps imparti au site de Google n’est pas défini, il n’ya plus d’espoir.
Étendre sur https://superuser.com/a/509620/362156
Supposons que vous êtes à Berlin (Allemagne).
Alors utilisez ceci:
sudo TZ=Europe/Berlin date -s "$(TZ=Europe/Berlin date --date='TZ="UTC" '"$(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 , $6, $4 }' | sed 's/,//')")"
Pour une implémentation déjà prête à l'emploi de l'excellente réponse de @ryenus, consultez set_system_clock_from_google.sh .