我如何验证所有机器appolo01
-mars3
彼此之间的偏差小于 5 秒?
ssh appolo01 date ; ssh appolo02 date ; ssh appolo03 date ; ssh mars1 date ; ssh mars2 date ; ssh mars3 date
Sun Apr 22 09:05:39 UTC 2018
Sun Apr 22 09:05:40 UTC 2018
Sun Apr 22 09:05:40 UTC 2018
Sun Apr 22 09:05:40 UTC 2018
Sun Apr 22 09:05:40 UTC 2018
Sun Apr 22 09:05:48 UTC 2018
答案1
用于date +%s
获取 UNIX 时间戳,例如1524388823
.与依赖于语言环境的人类可读日期不同,这可以在脚本中更轻松地进行比较。
在时间正确同步的机器上,类似这样的事情应该可以工作:
a=$(date +%s)
b=$(ssh user@remote date +%s)
c=$(date +%s)
if [ $a -le $b -a $b -le $c ]
then
echo Seems to be OK.
fi
(a)
是 SSH 之前的当地时间,(b)
是遥远的时间,(c)
是 SSH 之后的当地时间。
如果(a <= b <= c)
可以相当安全地假设时间是同步的。这根本没有考虑网络延迟 - 检查 delta(a,c) - 但它仍然应该是合理的。假设 SSH 不会要求输入密码和/或您不会花一整天的时间来提供密码。
如果您仍想添加 5 秒的余量,请使用 a-5 和 c+5。当然,这在任一方向上都允许 5 秒 - 并且不符合所有机器上的 5 秒窗口。但除非你真的像主机名称所暗示的那样执行深空任务,否则一开始就没有理由接受如此巨大的时间差异。
如果您不断使用 NTP,而不仅仅是每年一次,那么无论如何,所有计算机都应该完美同步,并且大多数时候我们只是盲目地假设情况如此,甚至懒得去检查。