it-swarm.com.de

Wie verwende ich ntpdate hinter einem Proxy?

Ist es möglich, ntpdate hinter einem HTTP-Proxy mit Authentifizierung zu verwenden? Falls es nicht möglich ist, gibt es gute Alternativen?

45

Dies scheint ein klarer Fall für tlsdate zu sein.

 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.

Ich glaube nicht, dass ich jemals so viele Empfehlungen zur Verwendung von nicht bereinigten Daten aus dem Internet als Argument für einen Sudo-Aufruf gesehen habe.

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

26
dfc

Erweiterung der Antwort von 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/,//')"
43
fiford_g

Einzeiler

Angenommen, die Umgebungsvariable http_proxy ist bereits gesetzt :

Sudo date -s "$(curl -sD - google.com | grep '^Date:' | cut -d' ' -f3-6)Z"

Um sicherzugehen, was an Sudo date -s übergeben wird, führen Sie einfach den Teil curl ... des Befehls aus, um die Ausgabe zu sehen:

curl -sD - google.com | grep '^Date:' | cut -d' ' -f3-6

Oder eine sicherere Version, die die Ausgabelänge von curl überprüft:

date_utc=$(curl -sD - google.com | grep '^Date:' | cut -d' ' -f3-6)

[ -n "$date_utc" ] && Sudo date -s "${date_utc}Z"

Anmerkungen

Für den Fall, dass bestimmte Optionen für curl benötigt werden:

  • curl -x $proxy

    zum expliziten Festlegen des zu verwendenden Proxyservers (erforderlich, wenn http_proxy nicht festgelegt ist) wird standardmäßig das Protokoll http und der Port 1080 verwendet ( manuell ).

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

    um das Caching explizit zu deaktivieren , insbesondere wenn es in einem Cron-Job und/oder hinter einem Proxy-Server verwendet wird.

Alternative Form, die mit RHEL 6 getestet wurde und die bisher die Option '-u' verwendet, anstatt das "Z" an die Ausgabe anzuhängen:

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

Übrigens wird google.com dem www.google.com vorgezogen, da erstere zu einer 301-Umleitungsantwort führen, die viel kleiner ist (569 gegenüber 20k+-Zeichen), aber dennoch gut zu verwenden ist.

19
ryenus

Eine schnelle und schmutzige Lösung für Leute hinter einem HTTP-Proxy-Server:

Mein Standort ist GMT + 4. Ich kann die aktuelle Uhrzeit vom timeapi-Server mit der URL http://www.timeapi.org/utc/in+four+hours abrufen, z Weitere Informationen finden Sie auf der Website für Ihren Standort.

So richten Sie Datum und Uhrzeit ein:

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 " " )

Sie können den Befehl wiederholen, wenn der anfängliche Befehl 'time' einen hohen Wert meldet ...

5
Mehdi Amiri

Wenn es sich lediglich um einen HTTP-Proxy handelt, wird Port 80 verwendet. Die grundlegende Antwort lautet also Nein. NTP verwendet UDP-Port 123. Wenn es sich um einen allgemeineren Proxy-Server handelt, der alle Ports bedient, ist dies möglicherweise der Fall.

Es gibt einige Programme, die NTP über HTTP ausführen. Ich benutze kein Linux, aber dieses könnte es tun:

http://www.rkeene.org/oss/htp/ (immer noch nicht sicher, ob dies auch zur Authentifizierung führt).

Ich konnte keine für Windows finden, aber ich werde zurückschicken, wenn ich es tue.

5
KCotreau

Obwohl ntp über http erwähnt wurde, wundert es mich, dass niemand das kleine Hilfsprogramm htpdate erwähnt hat, das unter http://www.vervest.org/htp/ verfügbar ist. Im Gegensatz zu den Alternativen ist htpdate Teil der Standard-Repositorys von Debian und Ubuntu und kann mit apt-get installiert werden.

Es kann sowohl als normaler Befehl als auch unbeaufsichtigt im Dämonmodus ausgeführt werden.

2

Der NTP-Dienst verwendet das UDP-Protokoll, um die Uhrzeit zu synchronisieren. Daher funktioniert der HTTP/TCP-Proxy möglicherweise nicht. Alternativ zur akzeptierten Antwort gibt es ein gutes HTPdate Tool, um die Zeit hinter dem Proxy zu synchronisieren.

Ein Cron Job Beispiel:

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

Erweitern auf https://superuser.com/a/509620/362156

Nehmen wir an, Sie sind in Berlin (Deutschland).

Dann benutze dies:

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

Angenommen, die Umgebungsvariable http_proxy ist festgelegt:

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

Oder benutze curl -I --proxy="..." "http://www.google.com/"

Wenn für die Website von Google keine Zeit festgelegt ist, gibt es schließlich keine Hoffnung.

1
carveone

Eine voll funktionsfähige vorgefertigte Implementierung der hervorragenden Antwort von @ryenus finden Sie unter set_system_clock_from_google.sh .

0
Jay Taylor