我有两台机器
- 机器 A,IP 为 192.168.0.2
- 机器 B 分配的 IP 为 192.168.0.3
它们都连接到本地网络,我想将机器 A 的日期和时间设置为与机器 B 的日期和时间相匹配。
对于类似的问题,我将使用提供的解决方案这回答。
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
然而,这只有在我有互联网连接的情况下才会起作用。
不使用互联网,同步两个 Ubuntu 操作系统的时间和日期的命令是什么?
候选人 1 感谢@Joe 的意见。在机器 B 上设置一个 Web 服务器,从机器 A 查询它并从响应中获取时间和日期怎么样?看起来非常清晰……有没有更简单的解决方案?
候选人 2 感谢@matigo。在本地网络上设置 NTP 服务器。查看 NTP 文档以实施此解决方案
答案1
如果有互联网连接,您可以输入命令wget
中给出的命令date
,并看到它产生如下时间字符串:
25 Apr 2023 13:20:23Z
它通过从 HTTP 标头中获取日期、删除单词“Date:”并Z
在末尾添加一个来实现此目的。因此,您可以使用以下格式手动设置时间:
sudo date -s "25 Apr 2023 13:20:23Z"
您可能需要将“Apr”翻译为您所在地区缩写的月份名称。
答案2
答案3
出于安全考虑,我假设 192.168.0.* 必须保持无法与其他任何地方访问。若要轻松获得外部时间,可以这样做:
- 在另一台可以访问互联网的机器上安装虚拟机管理程序。(如果这台机器有 2 个以太网连接,其中 1 个面向互联网,另一个未使用或用于仅限本地网络,那就太理想了)
- 使这台机器成为某个时间服务器(NTP、Windows 域等等)的时间客户端。
- 安装一个预先构建的 NTP 服务器设备的客户操作系统
- 为客户设备提供一个 192.168.0.* 内的桥接地址
- 通过虚拟机管理程序将此客户机时间同步到主机时间。
- 使该客户端本身成为 NTP 时间的独立根源。
- 将 192.168.0.* 上的所有机器都设为此来宾设备的 NTP 客户端
由于虚拟机管理程序(而非网络路由)内部机制是将时间参考传递到 NTP 来宾设备的手段,因此 192.168.0.* 没有通向外部的路由,但仍具有良好的时间参考。如果虚拟机管理程序主机的网线仅用于本地网络,那么即使是外部线路上的混杂模式分路器也不会共享 192.168.0.* 的任何信息
答案4
好的,感谢你们提供的宝贵信息。经过一番研究和测试,以下是我正在使用的解决方案。
正如 Canonical 所述这里
从 Ubuntu 16.04 开始,timedatectl/timesyncd(systemd 的一部分)取代了大部分 ntpdate/ntp。
[...]
ntpdate 现在被认为已被弃用,取而代之的是 timedatectl(或 chrony),并且不再默认安装。timesyncd 通常会做正确的事情,让您的时间保持同步,而 chrony 将有助于处理更复杂的情况。
因此我尝试了 Chrony。我还检查了:
长话短说……
机器 A-配置为 NTP 服务器
sudo apt update && sudo apt upgrade
sudo apt install chrony
sudo vim /etc/chrony/chrony.conf
配置 NTP 服务器,确保添加local stratum 10
并允许 192.168.0.0/24,以强制服务器即使与互联网断开连接也能正常工作,并且该网络上的客户端可以连接到我们的 Chrony NTP 服务器进行时间同步。
confdir /etc/chrony/conf.d
pool ntp.ubuntu.com iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2
allow 192.168.0.0/24
sourcedir /run/chrony-dhcp
sourcedir /etc/chrony/sources.d
keyfile /etc/chrony/chrony.keys
driftfile /var/lib/chrony/chrony.drift
ntsdumpdir /var/lib/chrony
logdir /var/log/chrony
maxupdateskew 100.0
rtcsync
makestep 1 3
leapsectz right/UTC
重新启动 chrony 服务,检查它是否正在运行并启用它在启动时启动
sudo systemctl restart chrony
sudo systemctl status chrony
CTRL+C
sudo systemctl enable chrony
机器 B - 配置为 Chrony 客户端
与服务器池同步日期和时间,并将 192.168.0.1 或任何 IP 设置为首选服务器。
sudo apt update && sudo apt upgrade
sudo apt install chrony
sudo vim /etc/chrony/chrony.conf
将本地 NTP 服务器添加到池中。
pool 192.168.0.1 iburst prefer
keyfile /etc/chrony/chrony.keys
driftfile /var/lib/chrony/chrony.drift
logdir /var/log/chrony
log measurements statistics tracking
maxupdateskew 100.0
rtcsync
makestep 1.0 3
重启,检查服务并启用开机自启
sudo systemctl restart chrony
sudo systemctl status chrony
CTRL+C
sudo systemctl enable chrony
最后,检查它是否从正确的来源获取更新
chronyc tracking
chronyc sources
结论
摇滚吧,继续努力!
我将进行一个简短的测试,并将我遇到的任何问题更新此帖子。