リモートLinuxホストの時刻をローカルホストの時刻と同期させる方法

リモートLinuxホストの時刻をローカルホストの時刻と同期させる方法

したがって、問題なくlocalhostで次のコマンドを手動で実行できます。このコマンドは、リモートホストの時刻をローカルホストの時刻と同期させます。

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

(2番目はdateローカルホストの現在時刻を取得し、1番目は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\")\"\"

ただし、このコマンドは機能しません。 (問題の1つは、dateコマンドの2番目がlocalhostで実行されていないことですが、そうする必要があります)

どのように動作させることができますか?

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\"しかし、まだ動作しません。

このcmdをC ++コードで実行する必要があるため、完全なコードは次のようになります。

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)

関連情報