jak mogę zsynchronizować datę w dwóch komputerach?

2

Mam dwa komputery, ale nie mogę zmienić czasu w jednym, więc muszę zsynchronizować jeden z drugim. Ma QNX. Co mogę zrobić?? tylko polecenia

Evaristoyok
źródło
1
jak korzystać z ntp?
MaQleod
@MaQleod OP nie ma root dostęp do obu maszyn, więc nie jest to opcja. Zrozumiałem to przez „nie mogę zmienić czasu w jednym”.
terdon

Odpowiedzi:

5

Najlepszym rozwiązaniem byłoby zainstalowanie NTP na obu komputerach i zsynchronizuj je z tym samym serwerem. Oczywiście nie jest to opcja, jeśli tylko masz root dostęp do jednego z dwóch.

Zakładając, że masz dostęp ssh do obu maszyn, to machine1 to ten, z którym się umawiasz nie może zmienić i machine2 ten, z którym się umawiasz mogą zmiana (jako root użytkownik), możesz zrobić coś takiego:

remote_time=`ssh user@machine1 date` && date -s $remote_time

Musisz się zmienić user na nazwę użytkownika machine1. Jeśli uruchomisz to polecenie po zalogowaniu jako root na machine2, ustawisz jej datę na taką samą wartość jak machine1.

WYJAŚNIENIE:

Powyższe polecenie spowoduje ssh jako użytkownik user do machine1 i zapisz wynik date (aktualny czas i data dla machine1 ) do zmiennej $remote_time. Jeśli ssh kończy się pomyślnie ( && ), druga część polecenia ustawi czas machine2 (maszyna, z której polecenie zostało uruchomione) do wartości $remote_time.

CAVEAT: Dwa polecenia wymagają trochę czasu. Kiedy przetestowałem je na moim komputerze, zajęło im to 0,3 sekundy, może to zająć więcej czasu. Pamiętaj tylko, że jeśli potrzebujesz dokładności rzędu milisekund, to nie zadziała. Z drugiej strony, jeśli potrzebujesz dokładności milisekundy, tylko to, co będzie działać, to synchronizacja obu komputerów z serwerem NTP.

terdon
źródło
0

Jeśli potrzebujesz większej dokładności i nie chcesz używać ntp z jakiegokolwiek powodu, możesz użyć tej modyfikacji w metodzie @terdon.

Metoda leniwa. Załóżmy, że wydajesz 0.85s w połączeniu ssh:

host1# b=`date +%s.%N`; a=`echo $b + 0.85|bc`;  ssh -4 -C user@host2 "date --set=\"@$a\""

Bardziej wyrafinowane:

host1# a=`ssh user@host2 date +%s.%N` ; b=`ssh user@host2 date +%s.%N`; c=`echo $b +$b -$a | bc ` ; echo $c ;ssh user@host2 "date --set=\"@$c\" --rfc-3339=ns" ;date --rfc-3339=ns


1514483228.883729365
2017-12-28 18:47:08.883729365+01:00
2017-12-28 18:47:08.790489767+01:00

Warunkiem wstępnym jest przygotowanie klienta i serwera do wymiany kluczy użytkownika w celu uniknięcia wprowadzania haseł i upewnienia się, że masz rozdzielczość odwrotną dns ​​zarówno komputera host1, jak i będziesz mieć opóźnione połączenie ssh.

Mquinteiro
źródło