Có thể sử dụng ntpdate đằng sau proxy HTTP có xác thực không? Trong trường hợp không thể, có phương án nào tốt không?
Có thể sử dụng ntpdate đằng sau proxy HTTP có xác thực không? Trong trường hợp không thể, có phương án nào tốt không?
Câu trả lời:
Đây có vẻ như là một trường hợp rõ ràng cho 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.
Tôi không nghĩ rằng tôi đã từng thấy rất nhiều khuyến nghị sử dụng dữ liệu không được xác thực từ internet như là một đối số cho một lời mời sudo.
Mở rộng câu trả lời của 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/,//')"
Giả sử biến môi trường http_proxy
được đã được thiết lập :
sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
chúng tôi có thể xác minh ngày / giờ lấy trước:
# 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)"
Chỉ trong trường hợp, một số tùy chọn có thể cần thiết cho curl
:
curl -x $proxy
để đặt rõ ràng máy chủ proxy sẽ sử dụng, khi http_proxy
biến môi trường không được đặt, mặc định là giao thức http
và cổng 1080
( thủ công ).
curl -H 'Cache-Control: no-cache'
để vô hiệu hóa bộ nhớ đệm , đặc biệt là khi được sử dụng trong công việc định kỳ và / hoặc đằng sau máy chủ proxy.
Biểu mẫu thay thế được thử nghiệm với RHEL 6 sử dụng tùy chọn '-u' cho đến nay thay vì nối thêm "Z" vào đầu ra:
sudo date -u --set="$(curl -H 'Cache-Control: no-cache' -sD - http://google.com |grep '^Date:' |cut -d' ' -f3-6)"
BTW, google.com
được ưa thích hơn www.google.com
, vì các kết quả trước đây trong 301
phản hồi chuyển hướng, nhỏ hơn nhiều ( 569
so với 20k+
ký tự) nhưng vẫn tốt để sử dụng.
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
wget
phiên bản, mặc dù cá nhân tôi thích sử dụng curl
.
Nếu nó hoàn toàn là một proxy HTTP, thì nó đang sử dụng cổng 80, vì vậy câu trả lời cơ bản là không. NTP sử dụng cổng UDP 123. Nếu đó là máy chủ proxy chung hơn, phục vụ tất cả các cổng, thì có thể.
Có một số chương trình hiện có NTP qua HTTP. Tôi không sử dụng Linux, nhưng cái này có thể làm được:
http://www.rkeene.org/oss/htp/ (vẫn không chắc chắn liệu điều này có làm xác thực hay không).
Tôi không thể tìm thấy một cái cho Windows, nhưng tôi sẽ đăng lại nếu có.
Một giải pháp nhanh chóng và bẩn thỉu cho những người đứng sau máy chủ proxy http:
Vị trí của tôi là GMT + 4, tôi có thể kiểm tra thời gian hiện tại từ máy chủ timeapi với url http://www.timeapi.org/utc/in+four+hours , để biết thêm thông tin, vui lòng kiểm tra trang web cho vị trí của bạn.
Để thiết lập ngày & giờ tôi làm:
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 " " )
Bạn có thể lặp lại lệnh nếu lệnh 'thời gian' ban đầu báo cáo giá trị cao ...
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
Bạn không cần phải chú ý đến múi giờ nếu hệ điều hành của bạn được đặt chính xác. Linux nhận ra múi giờ được cung cấp trong chuỗi và đặt thời gian hệ thống một cách thích hợp.
Dịch vụ NTP đang sử dụng giao thức UDP để đồng bộ hóa thời gian. Vì vậy, HTTP / TCP proxy có thể không hoạt động cho nó. Thay thế cho câu trả lời được chấp nhận, có một công cụ htpdate tốt để đồng bộ hóa thời gian đằng sau proxy.
Một ví dụ về công việc định kỳ:
* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org
Mặc dù ntp trên http đã được đề cập, tôi ngạc nhiên khi không ai đề cập đến tiện ích nhỏ tiện lợi htpdate
như có sẵn trên http://www.vervest.org/htp/ . Không giống như các giải pháp thay thế, htpdate
là một phần của kho lưu trữ mặc định của Debian và Ubuntu và có thể được cài đặt bằng cách sử dụng apt-get
.
Nó có thể chạy cả hai như một lệnh thông thường hoặc âm thầm trong chế độ daemon.
Giả sử http_proxy
biến môi trường được đặt:
wget -S --spider "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'
Hoặc dùng curl -I --proxy="..." "http://www.google.com/"
Rốt cuộc, nếu trang web của Google không đặt thời gian thì sẽ không có hy vọng.
Mở rộng trên https://superuser.com/a/509620/362156
Giả sử bạn đang ở Berlin (Đức).
Sau đó sử dụng:
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/,//')")"
Để triển khai trước câu trả lời xuất sắc của @ryenus, hãy xem set_system_clock_from_google.sh .