認証付きのHTTPプロキシの背後でntpdateを使用することは可能ですか?それが不可能な場合、良い代替手段はありますか?
認証付きのHTTPプロキシの背後でntpdateを使用することは可能ですか?それが不可能な場合、良い代替手段はありますか?
回答:
これはtlsdateの明らかなケースのようです。
tlsdate: secure parasitic rdate replacement
tlsdate sets the local clock by securely connecting with TLS to remote
servers and extracting the remote time out of the secure handshake. Unlike
ntpdate, tlsdate uses TCP, for instance connecting to a remote HTTPS or TLS
enabled service, and provides some protection against adversaries that try
to feed you malicious time information.
sudo呼び出しの引数として、インターネットからの非サニタイズデータを使用するように多くの推奨事項を見たことがないと思います。
Github:https : //github.com/ioerror/tlsdate
sudo date -s "$(wget -S "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//' | head -1l | awk '{print $1, $3, $2, $5 ,"GMT", $4 }' | sed 's/,//')"
環境変数http_proxy
がすでに設定されていると仮定します:
sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
最初に取得した日付/時刻を確認できます:
# local date/time
date -d "$(curl -HCache-Control:no-cache -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
# or UTC date/time
date -ud "$(curl -HCache-Control:no-cache -sI google.com | grep '^Date:' | cut -d' ' -f3-6)"
念のため、特定のオプションが必要になる場合がありますcurl
。
curl -x $proxy
http_proxy
環境変数が設定されていない場合に、使用するプロキシサーバーを明示的に設定するには、デフォルトでプロトコルhttp
とポート1080
(manual)を使用します。
curl -H 'Cache-Control: no-cache'
特にcronジョブやプロキシサーバーの背後で使用する場合に、キャッシュを明示的に無効にします。
出力に「Z」を追加する代わりに「-u」オプションを使用するRHEL 6でテストされた代替形式:
sudo date -u --set="$(curl -H 'Cache-Control: no-cache' -sD - http://google.com |grep '^Date:' |cut -d' ' -f3-6)"
BTW google.com
はに優先されますwww.google.com
。前者の方が301
リダイレクト応答になります。リダイレクト応答ははるかに小さい(569
vs 20k+
文字)が、それでも使いやすいからです。
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
wget
バージョンですが、個人的にはの使用を好みcurl
ます。
純粋にHTTPプロキシである場合、ポート80を使用しているため、基本的な答えはそれに対する具体的な答えではありません。NTPはUDPポート123を使用します。それがより汎用的なプロキシサーバーであり、すべてのポートにサービスを提供している場合は、多分。
NTP over HTTPを実行するプログラムがいくつかあります。私はLinuxを使用していませんが、これはそれを行うかもしれません:
http://www.rkeene.org/oss/htp/(これが認証を行うかどうかはまだわかりません)。
Windows用のものは見つかりませんでしたが、見つかった場合はポストバックします。
HTTPプロキシサーバーの背後にいる人々のための迅速で汚いソリューション:
私の場所はGMT + 4です。URLhttp : //www.timeapi.org/utc/in+four+hoursでtimeapiサーバーから現在の時刻をチェックアウトできます。詳細については、あなたの場所のWebサイトをチェックアウトしてください。
日付と時刻を設定するには:
time sudo date $(wget -O - "http://www.timeapi.org/utc/in+four+hours" 2>/dev/null | sed s/[-T:+]/\ /g | awk '{print $2,$3,$4,$5,".",$6}' | tr -d " " )
最初の「time」コマンドが高い値を報告した場合、コマンドを繰り返すことができます...
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
。OSが正しく設定されていれば、タイムゾーンに注意を払う必要はありません。Linuxは、文字列で提供されるタイムゾーンを認識し、システム時間を適切に設定します。
httpを介したntpが言及されましたが、http://www.vervest.org/htp/でhtpdate
入手できる気の利いた小さなユーティリティについて誰も言及していないことに驚いています。代替とhtpdate
は異なり、DebianおよびUbuntuのデフォルトリポジトリの一部であり、を使用してインストールできますapt-get
。
通常のコマンドとして、またはデーモンモードでサイレントモードで実行できます。
https://superuser.com/a/509620/362156で展開する
あなたがベルリン(ドイツ)にいると仮定しましょう。
次にこれを使用します:
sudo TZ=Europe/Berlin date -s "$(TZ=Europe/Berlin date --date='TZ="UTC" '"$(wget -S "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//' | head -1l | awk '{print $1, $3, $2, $5 , $6, $4 }' | sed 's/,//')")"
@ryenus'優れた解答の完全作業プリベーク実装では、チェックアウトset_system_clock_from_google.shを。