Linux en mi caso (aunque no creo que importe demasiado).
Ton van den Heuvel
Solo importaba porque era más difícil encontrar algo de forma remota para Windows. La búsqueda clave que utilicé fue "NTP sobre HTTP", en caso de que desee buscar más.
KCotreau
3
Si está detrás de un proxy HTTP, probablemente significa que está en una compañía, y esta compañía puede proporcionar sus propios servicios NTP.
Tristan
Respuestas:
29
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.
Esta respuesta realmente debería estar en la parte superior.
Pi Delport
No logré que funcionara: con cada combinación imprime errores sobre falsos tickers. La respuesta de wget a continuación funciona.
Hola Angel
Lo he estado trabajando en una máquina Centos6.9 pero no es una alegría. Esto parece más saludable que otras recomendaciones, pero no es trivial que funcione ...
Advertencia: esto crearía el archivo 'index.html *' en el directorio actual.
ryenus
Tenga en cuenta que la versión corta debe usar www.google.com ya que google.com está redirigiendo a ella a través de 301 ahora con la fecha "pegada"
Hansi
Cuando hice el comentario, la respuesta para ese comando regresó un día cuatro días desactualizado.
Hansi
@ryenus Esta es una gran respuesta. Funciona perfectamente bien. Sin embargo, tengo un problema cuando pongo este comando en un trabajo crontab. La parte de fecha y hora se hace 00:00:00 cada vez que se ejecuta este trabajo. Traté de ejecutar en un script de shell. Mismo resultado.
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)"
Notas
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_proxyvariable de entorno no está configurada, predeterminada para protocolo httpy 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:
Por cierto, google.comes preferible a www.google.com, porque el primero da como resultado una 301respuesta de redireccionamiento, que es mucho más pequeña ( 569vs 20k+caracteres) pero aún así es buena para usar.
^ arriba es la wgetversión, aunque personalmente prefiero usar curl.
ryenus
2
¿Pasar datos no saneados de internet como una variable a una invocación de sudo? ¿Es 1999?
dfc
2
O simplemente use tlsdate y no confíe en errores desagradables como este.
dfc
Sí, funciona con proxies. También leí la pregunta.
dfc
5
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:
El enlace NTP sobre HTTP es inspirador, ¡gracias por eso!
Ton van den Heuvel
5
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 ...
Gracias por el consejo, lo tengo aún más fácil: 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.
Melebius
2
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.
Aunque se ha mencionado ntp sobre http, me sorprende que nadie haya mencionado la ingeniosa y pequeña utilidad htpdatedisponible en http://www.vervest.org/htp/ . A diferencia de las alternativas, htpdateforma 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.
Respuestas:
Este parece ser un caso claro para tlsdate.
No creo haber visto tantas recomendaciones para usar datos no saneados de Internet como argumento para una invocación de sudo.
Github: https://github.com/ioerror/tlsdate
fuente
Ampliando la respuesta de carveone :
fuente
Un trazador de líneas
Suponiendo que la variable de entorno ya
http_proxy
esté establecida :podemos verificar primero la fecha / hora recuperada:
Notas
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 protocolohttp
y puerto1080
( 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:
Por cierto,
google.com
es preferible awww.google.com
, porque el primero da como resultado una301
respuesta de redireccionamiento, que es mucho más pequeña (569
vs20k+
caracteres) pero aún así es buena para usar.fuente
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 usarcurl
.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.
fuente
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:
Puede repetir el comando si el comando 'time' inicial informa un valor alto ...
fuente
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:
fuente
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 usandoapt-get
.Se puede ejecutar tanto como un comando ordinario o silenciosamente en modo demonio.
fuente
Suponiendo que
http_proxy
se establezca la variable de entorno: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.
fuente
Expandiendo en https://superuser.com/a/509620/362156
Supongamos que estás en Berlín (Alemania).
Entonces usa esto:
fuente
Para obtener una implementación completa de la excelente respuesta de @ryenus, consulte set_system_clock_from_google.sh .
fuente