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