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?
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 de Sudo.
Développer la réponse par réponse :
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
est déjà définie :
Sudo date -s "$(curl -sD - google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
Pour être sûr de ce qui est passé à Sudo date -s
, lancez simplement la partie curl ...
de la commande pour voir sa sortie:
curl -sD - google.com | grep '^Date:' | cut -d' ' -f3-6
Ou une version plus sûre qui vérifie la longueur de sortie de curl
:
date_utc=$(curl -sD - google.com | grep '^Date:' | cut -d' ' -f3-6)
[ -n "$date_utc" ] && Sudo date -s "${date_utc}Z"
Juste au cas où, certaines options pourraient être nécessaires pour curl
:
curl -x $proxy
pour définir explicitement le serveur proxy à utiliser, requis si http_proxy
n'est pas défini, par défaut sur protocole http
et port 1080
( manuel ).
curl -H 'Cache-Control: no-cache'
explicitement désactiver 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)"
Au lieu de cela, google.com
est préférable à www.google.com
, car le premier entraîne une réponse de redirection 301
, qui est beaucoup plus petite (569
vs 20k+
caractères), mais qui peut néanmoins être utilisée.
Une solution rapide et sale pour les personnes derrière un serveur proxy http:
Mon emplacement est GMT + 4, je peux consulter l’heure du serveur timeapi avec l’url http://www.timeapi.org/utc/in+four+hours , pour plus d'informations, consultez 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 ...
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/ (vous ne savez toujours pas si cela permettra l'authentification).
Je ne pouvais pas en trouver un pour Windows, mais je le posterais si je le faisais.
Bien que ntp over http ait été mentionné, je suis surpris que personne ne mentionne le petit utilitaire htpdate
comme 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é à l'aide de apt-get
.
Il peut être exécuté en tant que commande ordinaire ou en mode démon en mode silencieux.
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 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
Développer 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/,//')")"
En supposant que la variable d'environnement http_proxy
soit définie:
wget -S --spider "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'
Ou utilisez 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.
Pour une mise en œuvre prédéfinie entièrement fonctionnelle de l'excellente réponse de @ryenus, consultez set_system_clock_from_google.sh .