其他技术 / 嵌入式 · 2024年1月5日 0

如何在Linux或Windows主机上通过SSH将本地时间同步到远程主机

最近调试时发现远程嵌入式设备的时间和本地时间不对,远程设备也不方便安装ntpdate等命令,甚至可能无法连接网络,所以无法通过ntp服务器来进行对时,因此有了如下思路。

1. 获取本地设备时间

本地时间可通过如下命令获取:

date '+%Y%m%d %H:%M:%S'

输出如下:

20240105 14:51:27

2. 设置远程设备时间

远程设备时间也可在SSH登入后通过date命令来设置:

date -s "20240105 14:51:27"

注意时间字符串需用引号包裹。
输出如下:

Fri Jan  5 14:51:27 CST 2024

3. 将远程设备时间写入RTC时钟

时间设置完成后应通过hwclock命令写入RTC硬件时钟,防止重启后时间错误:

hwclock -w

该命令无输出。

4. 上述流程如果分开操作那么一定会存在较大的时间差,因此应将其合并到一条命令,在获取本地时间后直接通过SSH的远程执行命令功能来设置远程时间。这里我们使用|管道操作来将本地生成的命令传入SSH远程执行:

echo "date -s \"`date '+%Y%m%d %H:%M:%S'`\" && hwclock -w" | ssh root@192.168.1.10

输出如下:

Fri Jan  5 14:51:27 CST 2024

如此便实现了一条命令同步本地时间到远程设备,精度仅受本地到远程设备的网络延迟影响。

Windows下也可以使用powershell来实现类似操作,命令如下:

echo ("date -s "+'"'+(Get-Date -Format 'yyyyMMdd HH:mm:ss')+'"') | ssh root@192.168.51.98

Windows的字符串操作还是相对麻烦一点。