如何将远程Linux主机上的时间与本地主机上的时间同步

如何将远程Linux主机上的时间与本地主机上的时间同步

所以我可以在本地主机上手动运行以下命令,没有问题。该命令将远程主机上的时间与本地主机上的时间同步:

ssh [email protected] "date --set \"$(date -u +"%Y-%m-%d %H:%M:%S")\""

(第二个date将获取本地主机上的当前时间,第一个date将设置远程主机上的时间。)

然而,我需要自动化这个过程(在c++代码中,见下文),所以我需要使用sshpass来帮助我输入密码,所以我有这样的东西:

sshpass -p \'xxxxxxx\' ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] \"date --set \"$(date -u +\"%Y-%m-%d %H:%M:%S\")\"\"

但这个命令不起作用。 (我猜问题之一是date命令中的第二个不能在本地主机上运行,​​但它应该)

我怎样才能让它发挥作用?

ntp注意:远程主机上没有。

编辑:

所以我将该命令更新为:

TIME=$(date -u +\"%Y-%m-%d %H:%M:%S\"); sshpass -p 'xxxxxxxx' ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] date --set \"$TIME\"但仍然不起作用。

我需要在 C++ 代码中运行这个 cmd,所以完整的代码如下:

system("TIME=$(date -u +\"%Y-%m-%d %H:%M:%S\"); sshpass -p 'xxxxxxx' ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] date --set \"$TIME\"");

答案1

你需要简化它。

ssh [email protected] date --set @$(date -u +%s)

获取$(date +%s)自 1970 年 1 月 1 日以来的秒数,并@告诉日期期望日期格式为自 1970 年 1 月 1 日以来的秒数

编辑:您在评论中提到这需要位于字符串中,并将使用 .cpp 代码在 cpp 代码中执行system()。如果是这种情况,您可以只使用它time()来构造字符串,而不是传递$(date +%s)给 shell。

相关内容