Linux in meinem Fall (glaube aber nicht, dass es wichtig ist).
Ton van den Heuvel
Es war nur wichtig, weil es für Windows schwieriger war, etwas aus der Ferne zu finden. Die von mir verwendete Schlüsselsuche war "NTP über HTTP", falls Sie weiter suchen möchten.
KCotreau
3
Wenn Sie sich hinter einem HTTP-Proxy befinden, bedeutet dies wahrscheinlich, dass Sie sich in einem Unternehmen befinden und dieses Unternehmen möglicherweise seine eigenen NTP-Dienste bereitstellt.
Tristan
Antworten:
29
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 gesehen habe, nicht bereinigte Daten aus dem Internet als Argument für einen Sudo-Aufruf zu verwenden.
Ich habe es nicht geschafft, es zum Laufen zu bringen - bei jeder Kombination werden Fehler über falsche Ticker ausgegeben. wget Antwort unten funktioniert.
Hi-Angel
Habe es auf einem Centos6.9-Rechner ausprobiert, aber keine Freude. Dies scheint gesünder zu sein als andere Empfehlungen, aber es ist nicht trivial, es zum
Achtung, dies würde die Datei 'index.html *' im aktuellen Verzeichnis erzeugen.
Ryenus
Beachten Sie, dass die Kurzversion www.google.com verwenden sollte, da google.com jetzt mit dem Datum "stecken geblieben"
Hansi
Als ich den Kommentar abgab, kam die Antwort für diesen Befehl vier Tage veraltet zurück.
Hansi
@ryenus Dies ist eine großartige Antwort. Es funktioniert einwandfrei. Ich habe jedoch ein Problem, wenn ich diesen Befehl in einen Crontab-Job einbaue. Der Zeitanteil des Datums wird bei jeder Ausführung dieses Jobs auf 00:00:00 festgelegt. Ich habe versucht, ein Shell-Skript auszuführen. Gleiches Ergebnis.
Wir können zuerst das abgerufene Datum und die Uhrzeit überprüfen:
# 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)"
Anmerkungen
Für den Fall, dass bestimmte Optionen benötigt werden curl:
curl -x $proxy
Zum expliziten Festlegen des Proxy-Servers, der verwendet wird, wenn die http_proxyUmgebungsvariable nicht festgelegt ist, werden standardmäßig Protokoll httpund Port 1080
( manuell ) verwendet.
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:
BTW, google.comwird bevorzugt über www.google.com, weil die früheren Ergebnisse in einer 301Umleitungsantwort, die viel kleiner ist ( 569vs 20k+Zeichen) , aber immer noch gut zu bedienen.
^ oben ist die wgetVersion, obwohl ich persönlich lieber benutze curl.
Ryenus
2
Unbereinigte Daten aus dem Internet als Variable an einen Sudo-Aufruf übergeben? Ist es 1999?
DFC
2
Oder verwende einfach tlsdate und verlasse dich nicht auf so üble Klamotten.
DFC
Ja, es funktioniert mit Proxies. Ich habe die Frage auch gelesen.
DFC
5
Wenn es sich lediglich um einen HTTP-Proxy handelt, wird Port 80 verwendet. Die grundlegende Antwort lautet also Nein. NTP verwendet den 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:
Der NTP über HTTP-Link ist inspirierend, danke dafür!
Ton van den Heuvel
5
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 über die URL http://www.timeapi.org/utc/in+four+hours abrufen. Weitere Informationen erhalten Sie auf der Website Ihres Standorts.
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 ...
Vielen Dank für den Tipp, ich habe es noch einfacher: sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"Sie müssen nicht auf die Zeitzone achten, wenn Ihr Betriebssystem richtig eingestellt ist. Linux erkennt die in der Zeichenfolge angegebene Zeitzone und stellt die Systemzeit entsprechend ein.
Melebius
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.
Obwohl ntp über http erwähnt wurde, wundert es mich, dass niemand das kleine Hilfsprogramm erwähnt hat, das htpdateauf http://www.vervest.org/htp/ verfügbar ist . Im Gegensatz zu den Alternativen gehört htpdatees zu den Standard-Repositorys von Debian und Ubuntu und kann mit installiert werden apt-get.
Es kann sowohl als normaler Befehl als auch unbeaufsichtigt im Dämonmodus ausgeführt werden.
Antworten:
Dies scheint ein klarer Fall für tlsdate zu sein.
Ich glaube nicht, dass ich jemals so viele Empfehlungen gesehen habe, nicht bereinigte Daten aus dem Internet als Argument für einen Sudo-Aufruf zu verwenden.
Github: https://github.com/ioerror/tlsdate
quelle
Erweiterung der Antwort von carveone :
quelle
Einzeiler
Angenommen, die Umgebungsvariable
http_proxy
ist bereits festgelegt :Wir können zuerst das abgerufene Datum und die Uhrzeit überprüfen:
Anmerkungen
Für den Fall, dass bestimmte Optionen benötigt werden
curl
:curl -x $proxy
Zum expliziten Festlegen des Proxy-Servers, der verwendet wird, wenn die
http_proxy
Umgebungsvariable nicht festgelegt ist, werden standardmäßig Protokollhttp
und Port1080
( manuell ) verwendet.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:
BTW,
google.com
wird bevorzugt überwww.google.com
, weil die früheren Ergebnisse in einer301
Umleitungsantwort, die viel kleiner ist (569
vs20k+
Zeichen) , aber immer noch gut zu bedienen.quelle
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
wget
Version, obwohl ich persönlich lieber benutzecurl
.Wenn es sich lediglich um einen HTTP-Proxy handelt, wird Port 80 verwendet. Die grundlegende Antwort lautet also Nein. NTP verwendet den 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.
quelle
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 über die URL http://www.timeapi.org/utc/in+four+hours abrufen. Weitere Informationen erhalten Sie auf der Website Ihres Standorts.
So richten Sie Datum und Uhrzeit ein:
Sie können den Befehl wiederholen, wenn der anfängliche Befehl 'time' einen hohen Wert meldet ...
quelle
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
Sie müssen nicht auf die Zeitzone achten, wenn Ihr Betriebssystem richtig eingestellt ist. Linux erkennt die in der Zeichenfolge angegebene Zeitzone und stellt die Systemzeit entsprechend ein.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:
quelle
Obwohl ntp über http erwähnt wurde, wundert es mich, dass niemand das kleine Hilfsprogramm erwähnt hat, das
htpdate
auf http://www.vervest.org/htp/ verfügbar ist . Im Gegensatz zu den Alternativen gehörthtpdate
es zu den Standard-Repositorys von Debian und Ubuntu und kann mit installiert werdenapt-get
.Es kann sowohl als normaler Befehl als auch unbeaufsichtigt im Dämonmodus ausgeführt werden.
quelle
Angenommen, die
http_proxy
Umgebungsvariable ist gesetzt: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.
quelle
Einblenden von https://superuser.com/a/509620/362156
Nehmen wir an, Sie sind in Berlin (Deutschland).
Dann benutze dies:
quelle
Eine voll funktionsfähige vorgefertigte Implementierung der hervorragenden Antwort von @ryenus finden Sie in set_system_clock_from_google.sh .
quelle