sntpコマンドで即時に時刻を同期したい理由
AWS CLIをはじめとした、現在時刻から計算して得られるトークンで認証するシステムでは、システム時計がずれていると認証に失敗する。
macOSは通常自動で時刻同期を行うが、スリープからの復帰直後やタイムゾーンをまたぐ移動の直後などはずれが生じやすい。
macOSにはsntpコマンドが標準搭載されており、NTPサーバーへ問い合わせてシステム時計を即時に補正できる。
sntpコマンドはmacOS 11以降で使える。
sntpコマンドで時刻のずれを確認する
まずオプションなしでsntpコマンドを実行すると、システム時計を変更せずに現在の時刻とのずれのみを表示する。
$ sntp ntp.nict.jp
+0.010180 +/- 0.016155 ntp.nict.jp 61.205.120.130
先頭の+0.010180が秒単位のずれ。この例では10ミリ秒程度のずれで、実用上問題ないレベルである。
ntp.nict.jpは情報通信研究機構(NICT)が提供する日本のNTPサーバー。
sntpコマンドでシステム時計を即時に同期する
システム時計を即時に補正するには-sSオプションを付けて実行する。
$ sudo sntp -sS ntp.nict.jp
Password:
+0.009632 +/- 0.018218 ntp.nict.jp 61.205.120.130
-Sオプションはオフセットが50ミリ秒より大きい場合にclock_settime(2)でシステム時計を即時に変更する。-sオプションはオフセットが50ミリ秒未満の場合にadjtime(2)で緩やかに補正する。
両方を指定しておくと、ずれの大小にかかわらず時刻を補正できる。
システム時計の変更には管理者権限が必要なため、sudoを付けて実行する。
まとめ
sntpコマンドを使うとNTPサーバーに問い合わせてシステム時計を即時に補正できる。
AWS CLIのようにタイムスタンプベースで認証するツールを使う前に時刻のずれが疑われる場合は、sudo sntp -sS ntp.nict.jpを実行して時刻を合わせるとよい。
\第一線のプログラマーの行動原理を学べる!/
