web-dev-qa-db-fra.com

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?

45
Ton van den Heuvel

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.

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

26
dfc

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/,//')"
43
fiford_g

Bon mot

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"

Remarques

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.

19
ryenus

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 ...

5
Mehdi Amiri

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.

5
KCotreau

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.

2
nondeterministic

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
2
artificerpi

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/,//')")"
1
PeterZ

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.

1
carveone

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 .

0
Jay Taylor