프록시 뒤에 ntpdate를 사용하는 방법은 무엇입니까?


49

인증을 통해 HTTP 프록시 뒤에 ntpdate를 사용할 수 있습니까? 가능하지 않은 경우 좋은 대안이 있습니까?


어떤 OS를 사용하십시오?
KCotreau

필자의 경우 Linux (별로 중요하지 않다고 생각).
톤 반 덴 Heuvel

Windows에서 원격으로 무언가를 찾기가 어려웠 기 때문에 중요했습니다. 추가 검색을 원할 경우 필자가 사용한 주요 검색은 "NTP over HTTP"였습니다.
KCotreau

3
HTTP 프록시를 사용하는 경우 회사에 소속되어 있음을 의미하며이 회사는 자체 NTP 서비스를 제공 할 수 있습니다.
Tristan

답변:


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 호출에 대한 인수로 사용하라는 권장 사항을 본 적이 없다고 생각합니다.

Github : https://github.com/ioerror/tlsdate


1
이 답변은 실제로 맨 위에 있어야합니다.
Pi Delport

나는 그것을 작동시키지 못했습니다. 모든 조합으로 거짓 시세에 대한 오류를 인쇄합니다. 아래의 wget 답변이 작동합니다.
Hi-Angel

Centos6.9 머신에서 작업했지만 기쁨은 없습니다. 이것은 다른 권장 사항보다 더 건강 해 보이지만 작동하게하는 것은 쉽지 않습니다 ...
Alfabravo

46

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/,//')"

주의 사항, 현재 디렉토리에 'index.html *'파일이 생성됩니다.
Ryenus

google.com이 현재 날짜가 "stuck"인 301을 통해 301을 통해 리디렉션되기 때문에 짧은 버전은 www.google.com을 사용해야합니다.
Hansi

의견을 말했을 때 해당 명령에 대한 응답이 4 일이 지난 날짜를 반환했습니다.
한시

@ryenus 이것은 훌륭한 답변입니다. 완벽하게 작동합니다. 그러나이 명령을 crontab 작업에 넣을 때 문제가 있습니다. 이 작업이 실행될 때마다 날짜의 시간 부분이 00:00:00이됩니다. 쉘 스크립트에서 실행하려고했습니다. 같은 결과입니다.
huzeyfe

@ huzeyfe, curl에 프록시를 전달할 수 있는지 확인 하시겠습니까?
ryenus

21

짧막 한 농담

환경 변수 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 httpand 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(훨씬 작은 리디렉션 응답, 56920k+문자)하지만 사용에 여전히 좋아.


sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
ryenus

^ 위 wget버전 은 개인적으로 사용하는 것을 선호합니다 curl.
ryenus

2
인터넷에서 비위생 데이터를 변수로 sudo 호출에 전달합니까? 1999 년입니까?
dfc

2
또는 tlsdate를 사용하고 이와 같이 불쾌한 kludges에 의존하지 마십시오.
dfc

예, 프록시와 함께 작동합니다. 나도 질문을 읽었다.
dfc

5

순전히 HTTP 프록시 인 경우 포트 80을 사용하므로 기본 답변은 구체적이지 않습니다. NTP는 UDP 포트 123을 사용합니다.보다 일반적인 프록시 서버 인 경우 모든 포트를 제공합니다.

HTTP를 통해 NTP를 수행하는 일부 프로그램이 있습니다. 나는 리눅스를 사용하지 않지만 이것을 할 수도있다.

http://www.rkeene.org/oss/htp/ (여전히 인증을 수행할지 확실하지 않음)

Windows 용을 찾을 수 없지만 게시하면 다시 게시하겠습니다.


리눅스에서도 다시 한 번 링크를 추가 할 수 없습니다 : mina86.com/2010/01/16/ntp-over-http 또한 다음 중 하나가 게시 할 수도 있습니다. nist.gov/pml/div688/grp40/ softwarelist.cfm
KCotreau

HTTP를 통한 NTP 링크가 고무적입니다.
톤 반 덴 휴벨

5

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는 문자열에 제공된 시간대를 인식하고 시스템 시간을 적절하게 설정합니다.
Melebius

2

NTP 서비스는 UDP 프로토콜을 사용하여 시간을 동기화합니다. 따라서 HTTP / TCP 프록시가 작동하지 않을 수 있습니다. 수락 된 답변 대신 프록시 뒤에 시간을 동기화 하는 좋은 htpdate 도구가 있습니다.

크론 작업 예 :

* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org

2

http를 통한 ntp가 언급되었지만 아무도 http://www.vervest.org/htp/에서htpdate 사용할 수 있는 멋진 작은 유틸리티 를 언급하지 않은 것에 놀랐습니다 . 다른 방법과 달리 데비안과 우분투의 기본 리포지토리의 일부이며를 사용하여 설치할 수 있습니다 .htpdateapt-get

일반 명령으로 또는 데몬 모드에서 자동으로 실행할 수 있습니다.


위의 답변을 확인하십시오.
artificerpi

1

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 사이트에 시간이 설정되어 있지 않으면 희망이 없습니다.


1

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/,//')")"

fiford_g의 답변과 비교하여 솔루션의 차이점을 설명해야합니다.
pabouk

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.