เป็นไปได้ไหมที่จะใช้ 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)"
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 หากเป็นพร็อกซีเซิร์ฟเวอร์ทั่วไปที่ให้บริการพอร์ตทั้งหมด
มีบางโปรแกรมที่ทำ 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 " " )
คุณสามารถทำซ้ำคำสั่งหากคำสั่ง 'เวลา' เริ่มต้นรายงานมูลค่าสูง ...
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 ผ่าน HTTP ได้รับการกล่าวถึงฉันประหลาดใจที่ไม่มีใครกล่าวถึงยูทิลิตี้เล็ก ๆ น้อย ๆ ที่ดีhtpdate
ที่สุดเท่าที่มีอยู่บนhttp://www.vervest.org/htp/ ซึ่งแตกต่างจากทางเลือกที่htpdate
เป็นส่วนหนึ่งของ Debian และ Ubuntu apt-get
ของที่เก็บค่าเริ่มต้นและสามารถติดตั้งได้โดยใช้
มันสามารถเรียกใช้ทั้งสองเป็นคำสั่งธรรมดาหรือเงียบ ๆ ในโหมด daemon
สมมติว่า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/,//')")"