Можно ли использовать ntpdate за HTTP-прокси с аутентификацией? Если это невозможно, есть ли хорошие альтернативы?
Можно ли использовать ntpdate за HTTP-прокси с аутентификацией? Если это невозможно, есть ли хорошие альтернативы?
Ответы:
Это похоже на очевидный случай для 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.
Расширяя ответ от 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/,//')"
Предполагая , что переменная окружения http_proxy
будет уже установлено :
sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
мы можем сначала проверить полученную дату / время:
# 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" к выводу:
sudo date -u --set="$(curl -H 'Cache-Control: no-cache' -sD - http://google.com |grep '^Date:' |cut -d' ' -f3-6)"
Кстати, 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 $(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 распознает часовой пояс, указанный в строке, и соответствующим образом устанавливает системное время.
Служба NTP использует протокол UDP для синхронизации времени. Так что HTTP / TCP прокси может не работать для него. Альтернатива принятому ответу, есть хороший инструмент htpdate для синхронизации времени за прокси.
Пример работы cron:
* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org
Хотя было упомянуто ntp over http, я удивлен, что никто не упомянул о изящной маленькой утилите, htpdate
доступной на http://www.vervest.org/htp/ . В отличие от альтернатив, htpdate
является частью стандартных репозиториев Debian и Ubuntu и может быть установлен с использованием apt-get
.
Его можно запускать как обычной командой, так и без вывода сообщений в режиме демона.
Предполагая, что http_proxy
переменная окружения установлена:
wget -S --spider "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'
Или использовать curl -I --proxy="..." "http://www.google.com/"
В конце концов, если у сайта Google нет установленного времени, надежды нет.
Расширение на https://superuser.com/a/509620/362156
Предположим, вы в Берлине (Германия).
Тогда используйте это:
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/,//')")"
Для полностью работающей предварительно запеченной реализации превосходного ответа @ryenus , проверьте set_system_clock_from_google.sh .