Czy można używać ntpdate za proxy HTTP z uwierzytelnianiem? Jeśli nie jest to możliwe, czy są jakieś dobre alternatywy?
Czy można używać ntpdate za proxy HTTP z uwierzytelnianiem? Jeśli nie jest to możliwe, czy są jakieś dobre alternatywy?
Odpowiedzi:
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.
Rozszerzenie odpowiedzi przez 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/,//')"
Zakładając, że zmienna środowiskowa http_proxy
jest już ustawiona :
sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
najpierw możemy zweryfikować pobraną datę / godzinę:
# 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)"
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 port 1080
( 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:
sudo date -u --set="$(curl -H 'Cache-Control: no-cache' -sD - http://google.com |grep '^Date:' |cut -d' ' -f3-6)"
BTW google.com
jest bardziej preferowane niż pierwsze www.google.com
, ponieważ pierwsze powoduje 301
reakcję przekierowania, która jest znacznie mniejsza (w 569
porównaniu z 20k+
postaciami), ale nadal dobra w użyciu.
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.
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ść ...
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:
* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org
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życiu apt-get
.
Może być uruchamiany zarówno jako zwykłe polecenie, jak i po cichu w trybie demona.
Zakładając, że http_proxy
zmienna środowiskowa jest ustawiona:
wget -S --spider "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'
Albo użyj curl -I --proxy="..." "http://www.google.com/"
W końcu jeśli witryna Google nie ma ustawionego czasu, nie ma nadziei.
Rozszerzanie na https://superuser.com/a/509620/362156
Załóżmy, że jesteś w Berlinie (Niemcy).
Następnie użyj tego:
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/,//')")"
Aby uzyskać w pełni działającą, wstępnie upieczoną implementację doskonałej odpowiedzi @ryenus , sprawdź set_system_clock_from_google.sh .