したがって、問題なく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)