Linux dalam kasus saya (tidak berpikir itu sangat berarti).
Ton van den Heuvel
Itu hanya penting karena lebih sulit untuk menemukan sesuatu yang jauh untuk Windows. Pencarian kunci yang saya gunakan adalah "NTP over HTTP", jika Anda ingin mencari lebih lanjut.
KCotreau
3
Jika Anda berada di belakang proxy HTTP, itu mungkin berarti Anda berada di sebuah perusahaan, dan perusahaan ini dapat menyediakan layanan NTP sendiri.
Tristan
Jawaban:
29
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.
Saya tidak berhasil membuatnya bekerja - dengan setiap kombinasi itu mencetak kesalahan tentang ticker palsu. wget jawaban di bawah ini berfungsi.
Hi-Angel
Telah mengerjakannya pada mesin Centos6.9 tetapi tidak ada sukacita. Ini tampaknya lebih sehat daripada rekomendasi lain tetapi tidak sepele untuk membuatnya bekerja ...
Peringatan, ini akan membuat file 'index.html *' di direktori saat ini.
ryenus
Perhatikan bahwa versi singkat harus menggunakan www.google.com karena google.com mengarahkannya ke 301 sekarang dengan tanggal "macet"
Hansi
Ketika saya memberikan komentar, respons untuk perintah itu kembali sehari empat hari kedaluwarsa.
Hansi
@ryenus Ini jawaban yang bagus. Ini bekerja dengan sangat baik. Namun saya memiliki masalah ketika saya menempatkan perintah ini di pekerjaan crontab. Bagian waktu tanggal dibuat 00:00:00 setiap kali pekerjaan ini berjalan. Saya mencoba menjalankan skrip shell. Hasil yang sama
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)"
Catatan
Untuk berjaga-jaga, opsi tertentu mungkin diperlukan untuk curl:
curl -x $proxy
untuk secara eksplisit mengatur server proxy untuk digunakan, ketika http_proxyvariabel lingkungan tidak diatur, standar untuk protokol httpdan 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:
BTW, google.comlebih disukai daripada www.google.com, karena yang sebelumnya menghasilkan 301respons pengalihan, yang jauh lebih kecil ( 569vs 20k+karakter) tetapi masih bagus untuk digunakan.
^ di atas adalah wgetversi, meskipun saya pribadi lebih suka menggunakan curl.
ryenus
2
Melewati data yang tidak bersih dari internet sebagai variabel untuk permohonan sudo? Apakah ini tahun 1999?
dfc
2
Atau cukup gunakan tlsdate dan jangan mengandalkan kludges jahat seperti ini.
dfc
ya, ia bekerja dengan proksi. Saya membaca pertanyaan juga.
dfc
5
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:
Tautan NTP melalui HTTP menginspirasi, terima kasih untuk itu!
Ton van den Heuvel
5
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 ...
Terima kasih atas tipnya, saya membuatnya lebih mudah: 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.
Melebius
2
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.
Meskipun ntp lebih dari http telah disebutkan, saya terkejut bahwa tidak ada yang menyebutkan utilitas kecil yang bagus htpdateseperti yang tersedia di http://www.vervest.org/htp/ . Berbeda dengan alternatif, htpdateadalah 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.
Jawaban:
Sepertinya ini adalah kasus yang jelas untuk tlsdate.
Saya tidak berpikir saya pernah melihat begitu banyak rekomendasi untuk menggunakan data yang tidak bersih dari internet sebagai argumen untuk permohonan sudo.
Github: https://github.com/ioerror/tlsdate
sumber
Memperluas jawaban dengan carveone :
sumber
Satu Liner
Dengan asumsi variabel lingkungan
http_proxy
yang sudah diatur :kami dapat memverifikasi tanggal / waktu yang diambil pertama:
Catatan
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 protokolhttp
dan port1080
( 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:
BTW,
google.com
lebih disukai daripadawww.google.com
, karena yang sebelumnya menghasilkan301
respons pengalihan, yang jauh lebih kecil (569
vs20k+
karakter) tetapi masih bagus untuk digunakan.sumber
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 menggunakancurl
.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.
sumber
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:
Anda dapat mengulangi perintah jika perintah 'waktu' awal melaporkan nilai tinggi ...
sumber
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:
sumber
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 menggunakanapt-get
.Itu dapat dijalankan baik sebagai perintah biasa atau diam-diam dalam mode daemon.
sumber
Dengan asumsi
http_proxy
variabel lingkungan diatur:Atau gunakan
curl -I --proxy="..." "http://www.google.com/"
Lagi pula, jika situs Google tidak memiliki waktu yang ditetapkan tidak ada harapan.
sumber
Memperluas pada https://superuser.com/a/509620/362156
Mari kita asumsikan Anda berada di Berlin (Jerman).
Kemudian gunakan ini:
sumber
Untuk implementasi jawaban @ryenus yang telah diprogram dengan baik, periksa set_system_clock_from_google.sh .
sumber