Linux no meu caso (não acho que isso importe muito).
Ton van den Heuvel
Isso só importava porque era mais difícil encontrar algo remotamente para o Windows. A principal pesquisa que usei foi "NTP over HTTP", caso você queira pesquisar mais.
KCotreau
3
Se você está atrás de um proxy HTTP, provavelmente significa que você está em uma empresa, e essa empresa pode fornecer seus próprios serviços NTP.
Tristan
Respostas:
29
Este parece ser um 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.
Eu acho que nunca vi tantas recomendações para usar dados não autorizados da internet como argumento para uma invocação de sudo.
Não consegui fazê-lo funcionar - com cada combinação ele imprime erros sobre falsos tickers. wget resposta abaixo funciona.
28816 Oi-Angel
Tenho trabalhado em uma máquina Centos6.9, mas sem alegria. Este parece mais saudável do que outras recomendações, mas não é trivial para fazê-lo funcionar ...
Advertência, isso criaria o arquivo 'index.html *' no diretório atual.
Ryenus
Note-se que a versão curta deve usar www.google.com desde google.com está redirecionando a ele através de 301 agora com a data "preso"
Hansi
Quando fiz o comentário, a resposta para esse comando retornou um dia quatro dias desatualizado.
Hansi
@ryenus Esta é uma ótima resposta. Funciona perfeitamente bem. No entanto, tenho um problema quando coloco esse comando em um trabalho crontab. A parte da hora da data é feita 00:00:00 sempre que esse trabalho é executado. Eu tentei executar em um script de shell. Mesmo resultado.
podemos verificar a data / hora recuperada primeiro:
# 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
Apenas no caso, podem ser necessárias certas opções para curl:
curl -x $proxy
para definir explicitamente o servidor proxy para uso, quando a http_proxyvariável de ambiente não estiver configurada, o padrão é o protocolo httpe a porta 1080
( manual ).
curl -H 'Cache-Control: no-cache'
desabilitar explicitamente o armazenamento em cache , especialmente quando usado em um trabalho cron e / ou atrás de um servidor proxy.
Formulário alternativo testado com RHEL 6 que usa a opção '-u' até o momento em vez de anexar o "Z" à saída:
BTW, google.comé o preferido www.google.com, porque o primeiro resulta em uma 301resposta de redirecionamento, que é muito menor ( caracteres 569vs 20k+), mas ainda é boa de usar.
^ acima é a wgetversão, embora eu pessoalmente prefira usar curl.
Ryenus
2
Passando dados não autorizados da Internet como uma variável para uma chamada de sudo? É 1999?
dfc
2
Ou apenas use tlsdate e não confie em kludges desagradáveis como este.
dfc
sim, funciona com proxies. Eu também li a pergunta.
dfc
5
Se é puramente um proxy HTTP, está usando a porta 80, portanto a resposta básica é não especificamente àquela. O NTP usa a porta UDP 123. Se for um servidor proxy mais genérico, servindo todas as portas, talvez seja.
Existem alguns programas por aí que fazem NTP sobre HTTP. Eu não uso Linux, mas este pode fazê-lo:
O link NTP sobre HTTP é inspirador, obrigado por isso!
Ton van den Heuvel
5
Uma solução rápida e suja para as pessoas por trás de um servidor proxy http:
Minha localização é GMT + 4, posso verificar a hora atual no servidor timeapi com o URL http://www.timeapi.org/utc/in+four+hours , para mais informações , consulte o site da sua localização.
Para configurar a data e hora, eu faço:
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 " " )
Você pode repetir o comando se o comando inicial 'time' reportar um valor alto ...
Obrigado pela dica, fiquei ainda mais fácil: sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"você não precisa prestar atenção ao fuso horário se o seu sistema operacional estiver definido corretamente. O Linux reconhece o fuso horário fornecido na cadeia e define a hora do sistema adequadamente.
precisa saber é o seguinte
2
O serviço NTP está usando o protocolo UDP para sincronizar o horário. Portanto, o proxy HTTP / TCP pode não funcionar para ele. Alternativa à resposta aceita, existe uma boa ferramenta htpdate para sincronizar o tempo atrás do proxy.
Embora o ntp sobre http tenha sido mencionado, estou surpreso que ninguém tenha mencionado o utilitário bacana htpdatedisponível em http://www.vervest.org/htp/ . Diferente das alternativas, htpdatefaz parte dos repositórios padrão do Debian e Ubuntu e pode ser instalado usando apt-get.
Pode ser executado como um comando comum ou silenciosamente no modo daemon.
Respostas:
Este parece ser um caso claro para tlsdate.
Eu acho que nunca vi tantas recomendações para usar dados não autorizados da internet como argumento para uma invocação de sudo.
Github: https://github.com/ioerror/tlsdate
fonte
Expandindo a resposta por carveone :
fonte
One Liner
Supondo que a variável de ambiente já
http_proxy
esteja configurada :podemos verificar a data / hora recuperada primeiro:
Notas
Apenas no caso, podem ser necessárias certas opções para
curl
:curl -x $proxy
para definir explicitamente o servidor proxy para uso, quando a
http_proxy
variável de ambiente não estiver configurada, o padrão é o protocolohttp
e a porta1080
( manual ).curl -H 'Cache-Control: no-cache'
desabilitar explicitamente o armazenamento em cache , especialmente quando usado em um trabalho cron e / ou atrás de um servidor proxy.
Formulário alternativo testado com RHEL 6 que usa a opção '-u' até o momento em vez de anexar o "Z" à saída:
BTW,
google.com
é o preferidowww.google.com
, porque o primeiro resulta em uma301
resposta de redirecionamento, que é muito menor ( caracteres569
vs20k+
), mas ainda é boa de usar.fonte
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
wget
versão, embora eu pessoalmente prefira usarcurl
.Se é puramente um proxy HTTP, está usando a porta 80, portanto a resposta básica é não especificamente àquela. O NTP usa a porta UDP 123. Se for um servidor proxy mais genérico, servindo todas as portas, talvez seja.
Existem alguns programas por aí que fazem NTP sobre HTTP. Eu não uso Linux, mas este pode fazê-lo:
http://www.rkeene.org/oss/htp/ (ainda não tenho certeza se isso fará autenticação).
Não consegui encontrar um para o Windows, mas postarei de volta se o fizer.
fonte
Uma solução rápida e suja para as pessoas por trás de um servidor proxy http:
Minha localização é GMT + 4, posso verificar a hora atual no servidor timeapi com o URL http://www.timeapi.org/utc/in+four+hours , para mais informações , consulte o site da sua localização.
Para configurar a data e hora, eu faço:
Você pode repetir o comando se o comando inicial 'time' reportar um valor alto ...
fonte
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
você não precisa prestar atenção ao fuso horário se o seu sistema operacional estiver definido corretamente. O Linux reconhece o fuso horário fornecido na cadeia e define a hora do sistema adequadamente.O serviço NTP está usando o protocolo UDP para sincronizar o horário. Portanto, o proxy HTTP / TCP pode não funcionar para ele. Alternativa à resposta aceita, existe uma boa ferramenta htpdate para sincronizar o tempo atrás do proxy.
Um exemplo de trabalho cron:
fonte
Embora o ntp sobre http tenha sido mencionado, estou surpreso que ninguém tenha mencionado o utilitário bacana
htpdate
disponível em http://www.vervest.org/htp/ . Diferente das alternativas,htpdate
faz parte dos repositórios padrão do Debian e Ubuntu e pode ser instalado usandoapt-get
.Pode ser executado como um comando comum ou silenciosamente no modo daemon.
fonte
Supondo que a
http_proxy
variável de ambiente esteja configurada:Ou use
curl -I --proxy="..." "http://www.google.com/"
Afinal, se o site do Google não tiver seu tempo definido, não há esperança.
fonte
Expansão em https://superuser.com/a/509620/362156
Vamos supor que você esteja em Berlim (Alemanha).
Então use isto:
fonte
Para uma implementação pré-preparada da excelente resposta do @ryenus, verifique set_system_clock_from_google.sh .
fonte