如何將遠端 linux 主機上的時間與本地主機上的時間同步
所以我可以在本地主機上手動執行以下命令沒有問題。該命令將遠端主機上的時間與本地主機上的時間同步:
ssh root@xxx.xx.xx.xx "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 root@xxx.xx.xx.xx \"date --set \"$(date -u +\"%Y-%m-%d %H:%M:%S\")\"\"
但是這個命令不起作用。(我想問題之一是
date
命令中的第二個不能在本地主機上執行,但它應該)我怎樣才能讓它工作?
注意:
ntp
遠端主機上沒有。編輯:
所以我將該 cmd 更新為:
TIME=$(date -u +\"%Y-%m-%d %H:%M:%S\"); sshpass -p 'xxxxxxxx' ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@xxx.xx.xx.xx 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 root@xxx.xx.xx.xx date --set \"$TIME\"");
你需要簡化它。
ssh root@xxx.xx.xx.xx date --set @$(date -u +%s)
獲取自 1970 年 1 月 1 日以來的
$(date +%s)
秒數,並@
告訴日期期望日期格式為自 1970 年 1 月 1 日以來的秒數編輯:您在評論中提到這需要在一個字元串中,並將在 cpp 程式碼中使用
system()
. 如果是這種情況,您可以只使用time()
構造字元串而不是傳遞$(date +%s)
給外殼。