Linux w moim przypadku (choć nie sądzę, że ma to duże znaczenie).
Ton van den Heuvel
Miało to znaczenie tylko dlatego, że trudniej było znaleźć coś zdalnie dla systemu Windows. Użyłem kluczowego wyszukiwania „NTP przez HTTP”, na wypadek, gdybyś chciał szukać dalej.
KCotreau
3
Jeśli jesteś za serwerem proxy HTTP, prawdopodobnie oznacza to, że jesteś w firmie, która może świadczyć własne usługi NTP.
Tristan
Odpowiedzi:
29
Wydaje się to oczywistym argumentem dla tlsdate.
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.
Nie sądzę, że kiedykolwiek widziałem tak wiele rekomendacji, aby wykorzystywać niezarządzane dane z Internetu jako argument do wywołania sudo.
Uwaga, spowoduje to utworzenie pliku „index.html *” w bieżącym katalogu.
ryenus
Pamiętaj, że krótka wersja powinna korzystać z www.google.com, ponieważ google.com przekierowuje na nią teraz za pośrednictwem 301 z datą „utknął”
Hansi
Kiedy skomentowałem, odpowiedź na to polecenie wróciła o cztery dni od daty.
Hansi
@ryenus To świetna odpowiedź. Działa idealnie dobrze. Mam jednak problem, gdy umieszczam to polecenie w zadaniu crontab. Część czasu jest wykonywana 00:00:00 przy każdym uruchomieniu tego zadania. Próbowałem uruchomić w skrypcie powłoki. Ten sam wynik.
BTW google.comjest bardziej preferowane niż pierwsze www.google.com, ponieważ pierwsze powoduje 301reakcję przekierowania, która jest znacznie mniejsza (w 569porównaniu z 20k+postaciami), ale nadal dobra w użyciu.
^ powyżej jest wgetwersją, chociaż osobiście wolę używać curl.
ryenus
2
Przekazywanie niezarządzanych danych z Internetu jako zmiennej do wywołania sudo? Czy to 1999?
dfc,
2
Lub po prostu użyj tlsdate i nie polegaj na takich paskudnych kludges.
dfc,
tak, działa z serwerami proxy. Też czytam pytanie.
dfc,
5
Jeśli jest to wyłącznie serwer proxy HTTP, używa portu 80, więc podstawowa odpowiedź brzmi „nie”. NTP używa portu UDP 123. Jeśli jest to bardziej ogólny serwer proxy obsługujący wszystkie porty, być może.
Istnieje kilka programów, które wykonują NTP przez HTTP. Nie używam Linuksa, ale ten może to zrobić:
Link NTP przez HTTP jest inspirujący, dzięki za to!
Ton van den Heuvel
5
Szybkie i brudne rozwiązanie dla osób stojących za serwerem proxy HTTP:
Moja lokalizacja to GMT + 4, mogę sprawdzić aktualny czas z serwera timeapi za pomocą adresu URL http://www.timeapi.org/utc/in+four+hours , aby uzyskać więcej informacji , proszę sprawdzić stronę internetową swojej lokalizacji.
Aby ustawić datę i godzinę, robię:
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 " " )
Możesz powtórzyć polecenie, jeśli początkowe polecenie „czas” zgłasza wysoką wartość ...
Dzięki za wskazówkę, stało się to jeszcze łatwiejsze: sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"Nie musisz zwracać uwagi na strefę czasową, jeśli Twój system operacyjny jest ustawiony poprawnie. Linux rozpoznaje strefę czasową podaną w ciągu i odpowiednio ustawia czas systemowy.
Melebius
2
Usługa NTP używa protokołu UDP do synchronizacji czasu. Dlatego proxy HTTP / TCP może nie działać. Alternatywą dla zaakceptowanej odpowiedzi jest dobre narzędzie htpdate do synchronizacji czasu za serwerem proxy.
Chociaż wspomniano o ntp nad http, dziwi mnie to, że nikt nie wspominał o fajnym małym narzędziu htpdatedostępnym na http://www.vervest.org/htp/ . W przeciwieństwie do alternatyw, htpdatejest częścią domyślnych repozytoriów Debiana i Ubuntu i może być zainstalowany przy użyciu apt-get.
Może być uruchamiany zarówno jako zwykłe polecenie, jak i po cichu w trybie demona.
Odpowiedzi:
Wydaje się to oczywistym argumentem dla tlsdate.
Nie sądzę, że kiedykolwiek widziałem tak wiele rekomendacji, aby wykorzystywać niezarządzane dane z Internetu jako argument do wywołania sudo.
Github: https://github.com/ioerror/tlsdate
źródło
Rozszerzenie odpowiedzi przez carveone :
źródło
Jedna wkładka
Zakładając, że zmienna środowiskowa
http_proxy
jest już ustawiona :najpierw możemy zweryfikować pobraną datę / godzinę:
Notatki
Na wszelki wypadek niektóre opcje mogą być potrzebne do
curl
:curl -x $proxy
jawne ustawienie używania serwera proxy, gdy
http_proxy
zmienna środowiskowa nie jest ustawiona, domyślnie protokółhttp
i port1080
( ręcznie ).curl -H 'Cache-Control: no-cache'
aby jawnie wyłączyć buforowanie , szczególnie gdy jest używane w zadaniu cron i / lub za serwerem proxy.
Alternatywna forma przetestowana z RHEL 6, która używa do tej pory opcji „-u” zamiast dołączania „Z” do wyniku:
BTW
google.com
jest bardziej preferowane niż pierwszewww.google.com
, ponieważ pierwsze powoduje301
reakcję przekierowania, która jest znacznie mniejsza (w569
porównaniu z20k+
postaciami), ale nadal dobra w użyciu.źródło
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
wget
wersją, chociaż osobiście wolę używaćcurl
.Jeśli jest to wyłącznie serwer proxy HTTP, używa portu 80, więc podstawowa odpowiedź brzmi „nie”. NTP używa portu UDP 123. Jeśli jest to bardziej ogólny serwer proxy obsługujący wszystkie porty, być może.
Istnieje kilka programów, które wykonują NTP przez HTTP. Nie używam Linuksa, ale ten może to zrobić:
http://www.rkeene.org/oss/htp/ (wciąż nie jestem pewien, czy to spowoduje uwierzytelnienie).
Nie mogłem znaleźć jednego dla systemu Windows, ale jeśli to zrobię, wyślę go ponownie.
źródło
Szybkie i brudne rozwiązanie dla osób stojących za serwerem proxy HTTP:
Moja lokalizacja to GMT + 4, mogę sprawdzić aktualny czas z serwera timeapi za pomocą adresu URL http://www.timeapi.org/utc/in+four+hours , aby uzyskać więcej informacji , proszę sprawdzić stronę internetową swojej lokalizacji.
Aby ustawić datę i godzinę, robię:
Możesz powtórzyć polecenie, jeśli początkowe polecenie „czas” zgłasza wysoką wartość ...
źródło
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
Nie musisz zwracać uwagi na strefę czasową, jeśli Twój system operacyjny jest ustawiony poprawnie. Linux rozpoznaje strefę czasową podaną w ciągu i odpowiednio ustawia czas systemowy.Usługa NTP używa protokołu UDP do synchronizacji czasu. Dlatego proxy HTTP / TCP może nie działać. Alternatywą dla zaakceptowanej odpowiedzi jest dobre narzędzie htpdate do synchronizacji czasu za serwerem proxy.
Przykład pracy crona:
źródło
Chociaż wspomniano o ntp nad http, dziwi mnie to, że nikt nie wspominał o fajnym małym narzędziu
htpdate
dostępnym na http://www.vervest.org/htp/ . W przeciwieństwie do alternatyw,htpdate
jest częścią domyślnych repozytoriów Debiana i Ubuntu i może być zainstalowany przy użyciuapt-get
.Może być uruchamiany zarówno jako zwykłe polecenie, jak i po cichu w trybie demona.
źródło
Zakładając, że
http_proxy
zmienna środowiskowa jest ustawiona:Albo użyj
curl -I --proxy="..." "http://www.google.com/"
W końcu jeśli witryna Google nie ma ustawionego czasu, nie ma nadziei.
źródło
Rozszerzanie na https://superuser.com/a/509620/362156
Załóżmy, że jesteś w Berlinie (Niemcy).
Następnie użyj tego:
źródło
Aby uzyskać w pełni działającą, wstępnie upieczoną implementację doskonałej odpowiedzi @ryenus , sprawdź set_system_clock_from_google.sh .
źródło