web-dev-qa-db-ja.com

プロキシの背後でntpdateを使用する方法?

認証付きのHTTPプロキシの背後でntpdateを使用することは可能ですか?それが不可能な場合、良い代替案はありますか?

51

これは、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

31
dfc

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/,//')"
49
fiford_g

一発ギャグ

環境変数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およびポート1080manual )に設定します。

  • 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.comwww.google.comよりも優先されます。前者の結果は301リダイレクトレスポンスとなり、はるかに小さくなります(56920k+文字)使いやすい。

22
ryenus

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」コマンドが高い値を報告する場合、コマンドを繰り返すことができます...

5
Max Amiri

純粋にHTTPプロキシである場合は、ポート80を使用しているため、基本的な答えは特にノーです。 NTPはUDPポート123を使用します。すべてのポートにサービスを提供する、より一般的なプロキシサーバーの場合は、.

HTTPを介してNTP=を実行するプログラムがいくつかあります。私はLinuxを使用していませんが、これはそれを実行する可能性があります。

http://www.rkeene.org/oss/htp/ (これでも認証が行われるかどうかは不明です)。

Windows用のものは見つかりませんでしたが、見つかったらポストバックします。

5
KCotreau

NTPサービスは、UDPプロトコルを使用して時刻を同期しています。したがって、HTTP/TCPプロキシが機能しない可能性があります。受け入れられた回答の代わりに、プロキシの背後で時間を同期するための優れた htpdate ツールがあります。

Cronジョブの例:

* 3 * * * /usr/bin/htpdate -s -P <PROXY_Host>:<PROXY__PORT> www.linux.org www.freebsd.org
4
artificerpi

Ntp over httpについて言及しましたが、 http://www.vervest.org/htp/ で利用できるような気の利いた小さなユーティリティhtpdateについて誰も言及しなかったことに驚いています。代替とは異なり、htpdateはDebianおよびUbuntuのデフォルトリポジトリの一部であり、apt-getを使用してインストールできます。

通常のコマンドとしても、サイレントモードでデーモンモードでも実行できます。

2

展開 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/,//')")"
1
PeterZ

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のサイトに時間が設定されていなければ、希望はありません。

1
carveone

@ryenusの優れた回答の完全に機能するプリベーク実装については、 set_system_clock_from_google.sh をチェックしてください。

0
Jay Taylor