小智 54
扩展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/,//')"
Run Code Online (Sandbox Code Playgroud)
dfc*_*dfc 32
这似乎是 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.
Run Code Online (Sandbox Code Playgroud)
我认为我从未见过这么多使用来自互联网的未经消毒的数据作为 sudo 调用的论据的建议。
Github:https : //github.com/ioerror/tlsdate
rye*_*nus 22
假设环境变量http_proxy中已设置:
sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
Run Code Online (Sandbox Code Playgroud)
我们可以先验证检索到的日期/时间:
# 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)"
Run Code Online (Sandbox Code Playgroud)
以防万一,可能需要某些选项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)"
Run Code Online (Sandbox Code Playgroud)
顺便说一句,google.com优于www.google.com,因为前者会导致301重定向响应,后者要小得多(569与20k+字符相比)但仍然很好用。
NTP 服务使用 UDP 协议来同步时间。所以 HTTP/TCP 代理可能不适合它。替代接受的答案,有一个很好的htpdate工具可以同步代理后面的时间。
一个 cron 作业示例:
* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org
Run Code Online (Sandbox Code Playgroud)
如果它纯粹是一个 HTTP 代理,则它使用端口 80,因此基本答案是否定的。NTP 使用 UDP 端口 123。如果它是一个更通用的代理服务器,为所有端口提供服务,那么也许可以。
有一些程序可以通过 HTTP 执行 NTP。我不使用 Linux,但这个可能会这样做:
http://www.rkeene.org/oss/htp/(仍然不确定这是否会进行身份验证)。
我找不到一个适用于 Windows 的,但如果我找到了,我会回帖。
小智 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 " " )
Run Code Online (Sandbox Code Playgroud)
如果初始“时间”命令报告的值很高,您可以重复该命令...
| 归档时间: |
|
| 查看次数: |
76803 次 |
| 最近记录: |