Linux

如何將遠端 linux 主機上的時間與本地主機上的時間同步

  • November 4, 2022

所以我可以在本地主機上手動執行以下命令沒有問題。該命令將遠端主機上的時間與本地主機上的時間同步:

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)給外殼。

引用自:https://unix.stackexchange.com/questions/723664