인증을 통해 HTTP 프록시 뒤에 ntpdate를 사용할 수 있습니까? 가능하지 않은 경우 좋은 대안이 있습니까?
인증을 통해 HTTP 프록시 뒤에 ntpdate를 사용할 수 있습니까? 가능하지 않은 경우 좋은 대안이 있습니까?
답변:
이것은 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 호출에 대한 인수로 사용하라는 권장 사항을 본 적이 없다고 생각합니다.
Github : https://github.com/ioerror/tlsdate
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
환경 변수가 설정되지 않은 경우 프록시 서버가 명시 적으로 사용하도록 설정하려면 기본적으로 protocol http
and port 1080
( manual )로 설정하십시오.
curl -H 'Cache-Control: no-cache'
특히 cron 작업 및 / 또는 프록시 서버 뒤에서 사용될 때 캐싱 을 명시 적으로 비활성화 합니다.
출력에 "Z"를 추가하는 대신 '-u'옵션을 사용하는 RHEL 6으로 테스트 된 대체 양식 :
sudo date -u --set="$(curl -H 'Cache-Control: no-cache' -sD - http://google.com |grep '^Date:' |cut -d' ' -f3-6)"
BTW, 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을 사용합니다.보다 일반적인 프록시 서버 인 경우 모든 포트를 제공합니다.
HTTP를 통해 NTP를 수행하는 일부 프로그램이 있습니다. 나는 리눅스를 사용하지 않지만 이것을 할 수도있다.
http://www.rkeene.org/oss/htp/ (여전히 인증을 수행할지 확실하지 않음)
Windows 용을 찾을 수 없지만 게시하면 다시 게시하겠습니다.
http 프록시 서버를 사용하는 사람들을위한 빠르고 더러운 솔루션 :
내 위치는 GMT + 4이며 URL http://www.timeapi.org/utc/in+four+hours를 사용 하여 timeapi 서버에서 현재 시간을 확인할 수 있습니다. 자세한 내용은 웹 사이트에서 귀하의 위치에 대한 웹 사이트를 확인하십시오.
날짜 및 시간을 설정하려면 :
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 " " )
초기 '시간'명령이 높은 값을보고하면 명령을 반복 할 수 있습니다.
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
졌습니다 .OS가 올바르게 설정되어 있으면 시간대에주의를 기울일 필요가 없습니다. Linux는 문자열에 제공된 시간대를 인식하고 시스템 시간을 적절하게 설정합니다.
NTP 서비스는 UDP 프로토콜을 사용하여 시간을 동기화합니다. 따라서 HTTP / TCP 프록시가 작동하지 않을 수 있습니다. 수락 된 답변 대신 프록시 뒤에 시간을 동기화 하는 좋은 htpdate 도구가 있습니다.
크론 작업 예 :
* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org
http를 통한 ntp가 언급되었지만 아무도 http://www.vervest.org/htp/에서htpdate
사용할 수 있는 멋진 작은 유틸리티 를 언급하지 않은 것에 놀랐습니다 . 다른 방법과 달리 데비안과 우분투의 기본 리포지토리의 일부이며를 사용하여 설치할 수 있습니다 .htpdate
apt-get
일반 명령으로 또는 데몬 모드에서 자동으로 실행할 수 있습니다.
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를 확인하십시오 .