Apakah mungkin untuk menggunakan ntpdate di belakang proxy HTTP dengan otentikasi? Jika tidak mungkin, apakah ada alternatif yang baik?
Apakah mungkin untuk menggunakan ntpdate di belakang proxy HTTP dengan otentikasi? Jika tidak mungkin, apakah ada alternatif yang baik?
Jawaban:
Sepertinya ini adalah kasus yang jelas untuk 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.
Saya tidak berpikir saya pernah melihat begitu banyak rekomendasi untuk menggunakan data yang tidak bersih dari internet sebagai argumen untuk permohonan sudo.
Memperluas jawaban dengan 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/,//')"
Dengan asumsi variabel lingkungan http_proxy
yang sudah diatur :
sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
kami dapat memverifikasi tanggal / waktu yang diambil pertama:
# 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)"
Untuk berjaga-jaga, opsi tertentu mungkin diperlukan untuk curl
:
curl -x $proxy
untuk secara eksplisit mengatur server proxy untuk digunakan, ketika http_proxy
variabel lingkungan tidak diatur, standar untuk protokol http
dan port 1080
( manual ).
curl -H 'Cache-Control: no-cache'
untuk secara eksplisit menonaktifkan caching , terutama ketika digunakan dalam pekerjaan cron dan / atau di belakang server proxy.
Formulir alternatif yang diuji dengan RHEL 6 yang menggunakan opsi '-u' untuk tanggal alih-alih menambahkan "Z" ke output:
sudo date -u --set="$(curl -H 'Cache-Control: no-cache' -sD - http://google.com |grep '^Date:' |cut -d' ' -f3-6)"
BTW, google.com
lebih disukai daripada www.google.com
, karena yang sebelumnya menghasilkan 301
respons pengalihan, yang jauh lebih kecil ( 569
vs 20k+
karakter) tetapi masih bagus untuk digunakan.
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
wget
versi, meskipun saya pribadi lebih suka menggunakan curl
.
Jika ini murni proxy HTTP, ia menggunakan port 80, jadi jawaban dasarnya adalah tidak untuk itu secara khusus. NTP menggunakan port UDP 123. Jika itu adalah server proxy yang lebih umum, melayani semua port, maka mungkin.
Ada beberapa program di luar sana yang melakukan NTP melalui HTTP. Saya tidak menggunakan Linux, tetapi yang ini mungkin melakukannya:
http://www.rkeene.org/oss/htp/ (masih belum yakin apakah ini akan melakukan otentikasi juga).
Saya tidak dapat menemukan satu untuk Windows, tetapi saya akan memposting kembali jika saya melakukannya.
Solusi cepat dan kotor untuk orang di belakang server proxy http:
Lokasi saya adalah GMT + 4, saya dapat memeriksa waktu saat ini dari server timeapi dengan url http://www.timeapi.org/utc/in+four+hours , untuk info lebih lanjut silakan cek situs web untuk lokasi Anda.
Untuk mengatur tanggal & waktu saya lakukan:
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 " " )
Anda dapat mengulangi perintah jika perintah 'waktu' awal melaporkan nilai tinggi ...
sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"
Anda tidak perlu memperhatikan zona waktu jika OS Anda diatur dengan benar. Linux mengenali zona waktu yang disediakan dalam string dan mengatur waktu sistem dengan tepat.
Layanan NTP menggunakan protokol UDP untuk menyinkronkan waktu. Jadi HTTP / TCP proxy mungkin tidak berfungsi untuk itu. Alternatif untuk jawaban yang diterima, ada alat htpdate yang baik untuk menyinkronkan waktu di belakang proksi.
Contoh pekerjaan cron:
* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org
Meskipun ntp lebih dari http telah disebutkan, saya terkejut bahwa tidak ada yang menyebutkan utilitas kecil yang bagus htpdate
seperti yang tersedia di http://www.vervest.org/htp/ . Berbeda dengan alternatif, htpdate
adalah bagian dari repositori default Debian dan Ubuntu dan dapat diinstal menggunakan apt-get
.
Itu dapat dijalankan baik sebagai perintah biasa atau diam-diam dalam mode daemon.
Dengan asumsi http_proxy
variabel lingkungan diatur:
wget -S --spider "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'
Atau gunakan curl -I --proxy="..." "http://www.google.com/"
Lagi pula, jika situs Google tidak memiliki waktu yang ditetapkan tidak ada harapan.
Memperluas pada https://superuser.com/a/509620/362156
Mari kita asumsikan Anda berada di Berlin (Jerman).
Kemudian gunakan ini:
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/,//')")"
Untuk implementasi jawaban @ryenus yang telah diprogram dengan baik, periksa set_system_clock_from_google.sh .