È possibile utilizzare ntpdate dietro un proxy HTTP con autenticazione? Nel caso in cui non fosse possibile, ci sono buone alternative?
È possibile utilizzare ntpdate dietro un proxy HTTP con autenticazione? Nel caso in cui non fosse possibile, ci sono buone alternative?
Risposte:
Questo sembra un chiaro caso per 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.
Non credo di aver mai visto così tanti consigli su come utilizzare i dati non autorizzati da Internet come argomento per una chiamata sudo.
Ampliare la risposta di 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/,//')"
Supponendo che la variabile di ambiente http_proxy
sia già impostata :
sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
possiamo verificare prima la data / ora recuperata:
# 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)"
Solo nel caso, alcune opzioni potrebbero essere necessari per curl
:
curl -x $proxy
per impostare esplicitamente il server proxy in modo che utilizzi, quando la http_proxy
variabile di ambiente non è impostata, impostazione predefinita su protocollo http
e porta 1080
( manuale ).
curl -H 'Cache-Control: no-cache'
per disabilitare esplicitamente la memorizzazione nella cache , specialmente se utilizzata in un processo cron e / o dietro un server proxy.
Modulo alternativo testato con RHEL 6 che utilizza fino a oggi l'opzione '-u' invece di aggiungere la "Z" all'output:
sudo date -u --set="$(curl -H 'Cache-Control: no-cache' -sD - http://google.com |grep '^Date:' |cut -d' ' -f3-6)"
A proposito, google.com
è preferito rispetto www.google.com
, perché il primo si traduce in una 301
risposta di reindirizzamento, che è molto più piccola ( 569
vs 20k+
caratteri) ma comunque buona da usare.
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
wget
versione, anche se personalmente preferisco usare curl
.
Se è puramente un proxy HTTP, utilizza la porta 80, quindi la risposta di base è no a quella specifica. NTP utilizza la porta UDP 123. Se si tratta di un server proxy più generico, che serve tutte le porte, forse.
Ci sono alcuni programmi là fuori che fanno NTP su HTTP. Non uso Linux, ma questo potrebbe farlo:
http://www.rkeene.org/oss/htp/ (ancora non sono sicuro se anche questo farà l'autenticazione).
Non sono riuscito a trovarne uno per Windows, ma lo invierò nuovamente.
Una soluzione rapida e sporca per le persone dietro un server proxy http:
La mia posizione è GMT + 4, posso controllare l'ora corrente dal server Timeapi con l'URL http://www.timeapi.org/utc/in+four+hours , per maggiori informazioni, visita il sito web della tua posizione.
Per impostare la data e l'ora che faccio:
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 " " )
Puoi ripetere il comando se il comando iniziale "time" indica un valore elevato ...
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
non è necessario prestare attenzione al fuso orario se il sistema operativo è impostato correttamente. Linux riconosce il fuso orario fornito nella stringa e imposta l'ora di sistema in modo appropriato.
Il servizio NTP utilizza il protocollo UDP per sincronizzare l'ora. Quindi il proxy HTTP / TCP potrebbe non funzionare per questo. In alternativa alla risposta accettata, esiste un buon strumento htpdate per sincronizzare il tempo dietro il proxy.
Un esempio di cron job:
* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org
Sebbene sia stato menzionato ntp su http, sono sorpreso che nessuno abbia menzionato l'utile piccola utilità htpdate
disponibile su http://www.vervest.org/htp/ . A differenza delle alternative, htpdate
fa parte dei repository predefiniti di Debian e Ubuntu e può essere installato usando apt-get
.
Può essere eseguito sia come un normale comando o silenziosamente in modalità demone.
Supponendo che la http_proxy
variabile di ambiente sia impostata:
wget -S --spider "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'
Oppure usa curl -I --proxy="..." "http://www.google.com/"
Dopotutto, se il sito di Google non ha il suo tempo impostato, non c'è speranza.
Espandibile su https://superuser.com/a/509620/362156
Supponiamo che tu sia a Berlino (Germania).
Quindi usa questo:
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/,//')")"
Per un'implementazione precotta perfettamente funzionante dell'eccellente risposta di @ryenus, dai un'occhiata a set_system_clock_from_google.sh .