認証付きの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呼び出しへの引数としてインターネットからの無害化されたデータを使用するためにこれほど多くの推奨事項を見たことがないと思います。
carveoneによる答え の拡張:
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)"
ところで、google.com
はwww.google.com
よりも優先されます。前者の結果は301
リダイレクトレスポンスとなり、はるかに小さくなります(569
と20k+
文字)使いやすい。
Httpプロキシサーバーの背後にいる人々のための迅速で汚れたソリューション:
私の場所はGMT + 4です。timeapiサーバーから現在の時刻をurl http://www.timeapi.org/utc/in+four+hours で確認できます。詳細については、あなたの場所のウェブサイト。
日付と時刻を設定するには:
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」コマンドが高い値を報告する場合、コマンドを繰り返すことができます...
純粋にHTTPプロキシである場合は、ポート80を使用しているため、基本的な答えは特にノーです。 NTPはUDPポート123を使用します。すべてのポートにサービスを提供する、より一般的なプロキシサーバーの場合は、.
HTTPを介してNTP=を実行するプログラムがいくつかあります。私はLinuxを使用していませんが、これはそれを実行する可能性があります。
http://www.rkeene.org/oss/htp/ (これでも認証が行われるかどうかは不明です)。
Windows用のものは見つかりませんでしたが、見つかったらポストバックします。
NTPサービスは、UDPプロトコルを使用して時刻を同期しています。したがって、HTTP/TCPプロキシが機能しない可能性があります。受け入れられた回答の代わりに、プロキシの背後で時間を同期するための優れた htpdate ツールがあります。
Cronジョブの例:
* 3 * * * /usr/bin/htpdate -s -P <PROXY_Host>:<PROXY__PORT> www.linux.org www.freebsd.org
Ntp over httpについて言及しましたが、 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/,//')")"
http_proxy
環境変数が設定されています:
wget -S --spider "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'
またはcurl -I --proxy="..." "http://www.google.com/"
結局のところ、Googleのサイトに時間が設定されていなければ、希望はありません。
@ryenusの優れた回答の完全に機能するプリベーク実装については、 set_system_clock_from_google.sh をチェックしてください。