Linux в моем случае (не думаю, что это имеет большое значение).
Тон ван ден Хеувел
Это имело значение только потому, что было труднее найти что-нибудь удаленно для Windows. Поиск ключей, который я использовал, был «NTP over HTTP», на случай, если вы захотите продолжить поиск.
Котро
3
Если вы находитесь за HTTP-прокси, это, вероятно, означает, что вы находитесь в компании, и эта компания может предоставлять свои собственные услуги NTP.
Тристан
Ответы:
29
Это похоже на очевидный случай для 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.
Я не думаю, что когда-либо видел столько рекомендаций по использованию неанизированных данных из Интернета в качестве аргумента для вызова sudo.
Мне не удалось заставить его работать - с каждой комбинацией он выдает ошибки о ложных тикерах. Ответ Wget ниже работает.
Привет, Ангел,
Работал на машине Centos6.9, но не радость. Это кажется более здоровым, чем другие рекомендации, но это не тривиально, чтобы заставить его работать ...
Предостережение: это создаст файл 'index.html *' в текущем каталоге.
ryenus
Обратите внимание, что в короткой версии следует использовать www.google.com, поскольку google.com перенаправляет на нее через 301, а дата «застряла»
Hansi
Когда я сделал комментарий, ответ на эту команду возвратился на четыре дня позже.
Ханси
@ryenus Это отличный ответ. Работает отлично. Однако у меня есть проблема, когда я помещаю эту команду в задание crontab. Часть времени даты сделана 00:00:00 всякий раз, когда выполняется это задание. Я пытался запустить в сценарии оболочки. Тот же результат.
мы можем сначала проверить полученную дату / время:
# 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)"
Заметки
На всякий случай могут потребоваться определенные опции для curl:
curl -x $proxy
явно установить прокси-сервер для использования, когда http_proxyпеременная окружения не задана, по умолчанию используется протокол httpи порт 1080
( вручную ).
curl -H 'Cache-Control: no-cache'
явное отключение кэширования , особенно при использовании в задании cron и / или за прокси-сервером.
Альтернативная форма, протестированная с RHEL 6, которая использует опцию '-u' до даты вместо добавления "Z" к выводу:
Кстати, google.comпредпочтительнее www.google.com, потому что первый приводит к 301ответу на перенаправление, который намного меньше (по 569сравнению с 20k+символами), но все еще хорош для использования.
^ выше wgetверсия, хотя я лично предпочитаю использовать curl.
Рен
2
Передача неанизированных данных из Интернета в качестве переменной для вызова sudo? Это 1999?
декабря
2
Или просто используйте tlsdate и не полагайтесь на неприятные ошибки.
декабря
да, это работает с прокси. Я тоже прочитал вопрос.
декабря
5
Если это чисто HTTP-прокси, он использует порт 80, поэтому основной ответ - нет. NTP использует UDP-порт 123. Если это более общий прокси-сервер, обслуживающий все порты, то, возможно,.
Есть некоторые программы, которые делают NTP через HTTP. Я не использую Linux, но это может сделать это:
Ссылка NTP через HTTP вдохновляет, спасибо за это!
Тон ван ден Хеувел
5
Быстрое и грязное решение для людей, использующих прокси-сервер http:
Мое местоположение - GMT + 4, я могу узнать текущее время с сервера timeapi с помощью URL http://www.timeapi.org/utc/in+four+hours , для получения дополнительной информации, пожалуйста, проверьте сайт на предмет вашего местоположения.
Для установки даты и времени я делаю:
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 " " )
Вы можете повторить команду, если начальная команда 'time' сообщает о высоком значении ...
Спасибо за совет, мне стало еще проще: sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"вам не нужно обращать внимание на часовой пояс, если ваша ОС установлена правильно. Linux распознает часовой пояс, указанный в строке, и соответствующим образом устанавливает системное время.
Мелебиус
2
Служба NTP использует протокол UDP для синхронизации времени. Так что HTTP / TCP прокси может не работать для него. Альтернатива принятому ответу, есть хороший инструмент htpdate для синхронизации времени за прокси.
Хотя было упомянуто ntp over http, я удивлен, что никто не упомянул о изящной маленькой утилите, htpdateдоступной на http://www.vervest.org/htp/ . В отличие от альтернатив, htpdateявляется частью стандартных репозиториев Debian и Ubuntu и может быть установлен с использованием apt-get.
Его можно запускать как обычной командой, так и без вывода сообщений в режиме демона.
Ответы:
Это похоже на очевидный случай для tlsdate.
Я не думаю, что когда-либо видел столько рекомендаций по использованию неанизированных данных из Интернета в качестве аргумента для вызова sudo.
Github: https://github.com/ioerror/tlsdate
источник
Расширяя ответ от carveone :
источник
Один лайнер
Предполагая , что переменная окружения
http_proxy
будет уже установлено :мы можем сначала проверить полученную дату / время:
Заметки
На всякий случай могут потребоваться определенные опции для
curl
:curl -x $proxy
явно установить прокси-сервер для использования, когда
http_proxy
переменная окружения не задана, по умолчанию используется протоколhttp
и порт1080
( вручную ).curl -H 'Cache-Control: no-cache'
явное отключение кэширования , особенно при использовании в задании cron и / или за прокси-сервером.
Альтернативная форма, протестированная с RHEL 6, которая использует опцию '-u' до даты вместо добавления "Z" к выводу:
Кстати,
google.com
предпочтительнееwww.google.com
, потому что первый приводит к301
ответу на перенаправление, который намного меньше (по569
сравнению с20k+
символами), но все еще хорош для использования.источник
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
wget
версия, хотя я лично предпочитаю использоватьcurl
.Если это чисто HTTP-прокси, он использует порт 80, поэтому основной ответ - нет. NTP использует UDP-порт 123. Если это более общий прокси-сервер, обслуживающий все порты, то, возможно,.
Есть некоторые программы, которые делают NTP через HTTP. Я не использую Linux, но это может сделать это:
http://www.rkeene.org/oss/htp/ (все еще не уверен, будет ли это также выполнять аутентификацию).
Я не мог найти один для Windows, но я отправлю обратно, если я сделаю.
источник
Быстрое и грязное решение для людей, использующих прокси-сервер http:
Мое местоположение - GMT + 4, я могу узнать текущее время с сервера timeapi с помощью URL http://www.timeapi.org/utc/in+four+hours , для получения дополнительной информации, пожалуйста, проверьте сайт на предмет вашего местоположения.
Для установки даты и времени я делаю:
Вы можете повторить команду, если начальная команда 'time' сообщает о высоком значении ...
источник
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
вам не нужно обращать внимание на часовой пояс, если ваша ОС установлена правильно. Linux распознает часовой пояс, указанный в строке, и соответствующим образом устанавливает системное время.Служба NTP использует протокол UDP для синхронизации времени. Так что HTTP / TCP прокси может не работать для него. Альтернатива принятому ответу, есть хороший инструмент htpdate для синхронизации времени за прокси.
Пример работы cron:
источник
Хотя было упомянуто ntp over http, я удивлен, что никто не упомянул о изящной маленькой утилите,
htpdate
доступной на http://www.vervest.org/htp/ . В отличие от альтернатив,htpdate
является частью стандартных репозиториев Debian и Ubuntu и может быть установлен с использованиемapt-get
.Его можно запускать как обычной командой, так и без вывода сообщений в режиме демона.
источник
Предполагая, что
http_proxy
переменная окружения установлена:Или использовать
curl -I --proxy="..." "http://www.google.com/"
В конце концов, если у сайта Google нет установленного времени, надежды нет.
источник
Расширение на https://superuser.com/a/509620/362156
Предположим, вы в Берлине (Германия).
Тогда используйте это:
источник
Для полностью работающей предварительно запеченной реализации превосходного ответа @ryenus , проверьте set_system_clock_from_google.sh .
источник