¿Es posible usar ntpdate detrás de un proxy HTTP con autenticación? En caso de que no sea posible, ¿hay alguna buena alternativa?
¿Es posible usar ntpdate detrás de un proxy HTTP con autenticación? En caso de que no sea posible, ¿hay alguna buena alternativa?
Respuestas:
Este parece ser un caso claro para 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.
No creo haber visto tantas recomendaciones para usar datos no saneados de Internet como argumento para una invocación de sudo.
Ampliando la respuesta de 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/,//')"
Suponiendo que la variable de entorno yahttp_proxy
esté establecida :
sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
podemos verificar primero la fecha / hora recuperada:
# 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)"
Por si acaso, ciertas opciones podrían ser necesarias para curl
:
curl -x $proxy
para configurar explícitamente el servidor proxy para usar, cuando la http_proxy
variable de entorno no está configurada, predeterminada para protocolo http
y puerto 1080
( manual ).
curl -H 'Cache-Control: no-cache'
para deshabilitar explícitamente el almacenamiento en caché , especialmente cuando se usa en un trabajo cron y / o detrás de un servidor proxy.
Forma alternativa probada con RHEL 6 que usa la opción '-u' hasta la fecha en lugar de agregar la "Z" a la salida:
sudo date -u --set="$(curl -H 'Cache-Control: no-cache' -sD - http://google.com |grep '^Date:' |cut -d' ' -f3-6)"
Por cierto, google.com
es preferible a www.google.com
, porque el primero da como resultado una 301
respuesta de redireccionamiento, que es mucho más pequeña ( 569
vs 20k+
caracteres) pero aún así es buena para usar.
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
wget
versión, aunque personalmente prefiero usar curl
.
Si es puramente un proxy HTTP, está utilizando el puerto 80, por lo que la respuesta básica es no específicamente a eso. NTP usa el puerto UDP 123. Si es un servidor proxy más genérico, que sirve a todos los puertos, entonces tal vez.
Hay algunos programas que hacen NTP sobre HTTP. No uso Linux, pero este podría hacerlo:
http://www.rkeene.org/oss/htp/ (todavía no estoy seguro si esto hará autenticación tampoco).
No pude encontrar uno para Windows, pero volveré a publicar si lo hago.
Una solución rápida y sucia para las personas detrás de un servidor proxy http:
Mi ubicación es GMT + 4, puedo consultar la hora actual desde el servidor timeapi con la url http://www.timeapi.org/utc/in+four+hours , para obtener más información, consulte el sitio web de su ubicación.
Para configurar la fecha y hora que hago:
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 " " )
Puede repetir el comando si el comando 'time' inicial informa un valor alto ...
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
no necesita prestar atención a la zona horaria si su sistema operativo está configurado correctamente. Linux reconoce la zona horaria proporcionada en la cadena y establece la hora del sistema de manera adecuada.
El servicio NTP está utilizando el protocolo UDP para sincronizar la hora. Por lo tanto, el proxy HTTP / TCP puede no funcionar para él. Alternativa a la respuesta aceptada, hay una buena herramienta htpdate para sincronizar el tiempo detrás del proxy.
Un ejemplo de trabajo cron:
* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org
Aunque se ha mencionado ntp sobre http, me sorprende que nadie haya mencionado la ingeniosa y pequeña utilidad htpdate
disponible en http://www.vervest.org/htp/ . A diferencia de las alternativas, htpdate
forma parte de los repositorios predeterminados de Debian y Ubuntu y se puede instalar usando apt-get
.
Se puede ejecutar tanto como un comando ordinario o silenciosamente en modo demonio.
Suponiendo que http_proxy
se establezca la variable de entorno:
wget -S --spider "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'
O usar curl -I --proxy="..." "http://www.google.com/"
Después de todo, si el sitio de Google no tiene su horario establecido, no hay esperanza.
Expandiendo en https://superuser.com/a/509620/362156
Supongamos que estás en Berlín (Alemania).
Entonces usa esto:
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/,//')")"
Para obtener una implementación completa de la excelente respuesta de @ryenus, consulte set_system_clock_from_google.sh .