同步两台未连接到互联网的 Ubuntu 机器的时间和日期

同步两台未连接到互联网的 Ubuntu 机器的时间和日期

我有两台机器

  1. 机器 A,IP 为 192.168.0.2
  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

在一台机器上设置一个 NTP 服务器(据我所知,当前的 Ubuntu 版本用作chronydNTP 服务器),在另一台机器上使用 NTP 客户端(chronyc相反)同步到服务器机器似乎是最好的方法。

另一个选择是使用“老办法”日间协议您需要xinetd在服务器计算机(您将同步到的计算机)上安装并在其配置中启用白天服务(这里是有关如何启用它的一些信息)。日间服务以字符串形式返回当前日期和时间,因此您可能必须在客户端计算机(要同步到客户端计算机的计算机)上编写一些脚本来检索此信息并根据它设置时钟(我不知道有任何现成的日间协议客户端)。但使用 NTP 似​​乎仍然更好......

答案3

出于安全考虑,我假设 192.168.0.* 必须保持无法与其他任何地方访问。若要轻松获得外部时间,可以这样做:

  1. 在另一台可以访问互联网的机器上安装虚拟机管理程序。(如果这台机器有 2 个以太网连接,其中 1 个面向互联网,另一个未使用或用于仅限本地网络,那就太理想了)
  2. 使这台机器成为某个时间服务器(NTP、Windows 域等等)的时间客户端。
  3. 安装一个预先构建的 NTP 服务器设备的客户操作系统
  4. 为客户设备提供一个 192.168.0.* 内的桥接地址
  5. 通过虚拟机管理程序将此客户机时间同步到主机时间。
  6. 使该客户端本身成为 NTP 时间的独立根源。
  7. 将 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。我还检查了:

  1. 此链接这里
  2. 问题
  3. 红帽
  4. 教程

长话短说……

机器 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

结论

摇滚吧,继续努力!

我将进行一个简短的测试,并将我遇到的任何问题更新此帖子。

相关内容