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


49

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


どのOSをお願いしますか?
-KCotreau

私の場合のLinux(ただし、大した問題ではないと思います)。
トンヴァンデンヒューベル

重要なのは、Windowsで何かをリモートで見つけることが難しいためです。さらに検索したい場合に使用するキー検索は「NTP over HTTP」でした。
-KCotreau

3
HTTPプロキシの背後にいる場合は、おそらくあなたが会社にいることを意味し、この会社は独自のNTPサービスを提供している可能性があります。
トリスタン

回答:


29

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


1
この答えは本当に一番上にあるはずです。
パイデルポート

私はそれをうまく動作させることができませんでした。すべての組み合わせで、偽のティッカーに関するエラーを出力します。以下のwgetの回答は機能します。
こんにちは天使

Centos6.9マシンで作業してきましたが、喜びはありませんでした。これは他の推奨事項よりも健全に見えますが、機能させるのは簡単ではありません
...-アルファブラボ

46

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

警告、これは現在のディレクトリにファイル「index.html *」を作成します。
ライナス14

google.comは「スタック」日付で今301を介して、それにリダイレクトされているので、短いバージョンは、www.google.comを使用する必要があることに注意してください
Hansiの

コメントを作成したとき、そのコマンドに対する応答は、4日遅れの日を返しました。
ハンシ14

@ryenusこれは素晴らしい答えです。完璧に機能します。ただし、このコマンドをcrontabジョブに入れると問題が発生します。このジョブが実行されるたびに、日付の時刻部分が00:00:00になります。シェルスクリプトで実行しようとしました。同じ結果。
huzeyfe 14

@ huzeyfe、curlにプロキシを渡すことが機能するかどうか確認してください。
ライナス14

21

一発ギャグ

環境変数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)"

BTW google.comはに優先されますwww.google.com。前者の方が301リダイレクト応答になります。リダイレクト応答ははるかに小さい(569vs 20k+文字)が、それでも使いやすいからです。


sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
ライナス14

^上記はwgetバージョンですが、個人的にはの使用を好みcurlます。
ライナス14

2
インターネットからサニタイズされていないデータを変数としてsudo呼び出しに渡しますか?1999年ですか?
dfc 14

2
または、tlsdateを使用して、このような厄介なクラッジに頼らないでください。
dfc 14

はい、プロキシで動作します。私も質問を読みました。
dfc 14

5

純粋にHTTPプロキシである場合、ポート80を使用しているため、基本的な答えはそれに対する具体的な答えではありません。NTPはUDPポート123を使用します。それがより汎用的なプロキシサーバーであり、すべてのポートにサービスを提供している場合は、多分。

NTP over HTTPを実行するプログラムがいくつかあります。私はLinuxを使用していませんが、これはそれを行うかもしれません:

http://www.rkeene.org/oss/htp/(これが認証を行うかどうかはまだわかりません)。

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


ここでもLinux用、私はリンク以外の多くを追加することはできませんので:mina86.com/2010/01/16/ntp-over-httpまた、これらのいずれかが発行していることを何かがあるかもしれません。nist.gov/pml/div688/grp40/をsoftwarelist.cfm
KCotreau

NTP over HTTPリンクは刺激的です。
トンヴァンデンヒューベル

5

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は、文字列で提供されるタイムゾーンを認識し、システム時間を適切に設定します。
メレビウス14

2

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

cronジョブの例:

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

2

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

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


上記の私の答えを確認してください。
artificerpi

1

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

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

fiford_gの答えと比較して、ソリューションの何が違うのかを説明する必要があります。
pabouk 14

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.