utwórz dowiązanie symboliczne dla zdalnego komputera

2

Mam 2 serwery A i B systemu Linux, które mają wspólny katalog. Muszę utworzyć symboliczne łącze dla pliku / etc / hosts dla każdego serwera z jednym wspólnym plikiem. Kiedykolwiek aktualizuję ten wspólny plik, który jest współużytkowany przez oba serwery, mogą wiedzieć, jakie zmiany w pliku i automatycznie aktualizować / etc / hosts. Czy jest to możliwe przy użyciu dowiązania symbolicznego lub innej opcji?

Swapnil Sonawane
źródło

Odpowiedzi:

2

Zamiast mieć dowiązanie symboliczne do pliku (zdalnego) hosta, lepiej zaktualizować kopię lokalną o informacje zdalnego. W ten sposób w przypadku awarii sieci lub awarii hosta „master” nadal masz lokalny plik / etc / hosts.

W każdym lokalnym pliku / etc / hosts powinna znajdować się „struktura” oddzielająca informacje lokalne i globalne.

przykład lokalnego pliku / etc / hosts:

# local informations:

127.0.0.1 localhost otherhandylocalalias
# specificly needed aliases for this host:
1.2.3.4 some_specific.host.domain

# before:local after:global informations (copied from: ...........)

........................
........................

I możesz zastąpić resztę pliku (każdy po wierszu „# before: local after: global ....”) informacją „global”, pobraną ze zdalnego pliku przeznaczonego do obsługi „zweryfikowanych” informacji globalnych (np. plik zdalnego hosta: /etc/hosts_global_informations.master) lub pobrany TYLKO z „części globalnej” pliku master / etc / hosts (np .: remotehost: / etc / hosts).

Szczegółowe informacje na temat pobierania tych informacji są różne, w zależności od tego, co jest dostępne.

Przykład: w swojej powłoce możesz to zrobić ręcznie: (zakładając, że cały plik / etc / hosts zawiera ten sam separator, który jest linią pasującą do wyrażenia regularnego „zesep”:

export zesep='# before:local after:global .*'
   #this allows you to complete the line in each /etc/hosts with non-global informations!

awk "/${zesep}/,0 { continue } 1 { print }" </etc/hosts >/etc/newlocalhosts 
ssh user@remotehost 'cat /etc/hosts' | awk "/${zesep}/,0 { print } " >> /etc/newlocalhosts

A następnie zamień / etc / hosts na / etc / newlocalhosts RAZ JESTEŚ PEWNY, ŻE nowy jest poprawny (uwaga: sprawdź, czy ssh jest w porządku, na przykład, ponieważ może się nie powieść, jeśli sieć ulegnie awarii!). Jeśli jest poprawny, możesz:

cat /etc/newlocalhosts > /etc/hosts  #this will keep the settings (mode, etc) of /etc/hosts but replace its content. 
Olivier Dulac
źródło
0

Korzystanie z tradycyjnych dowiązań symbolicznych nie jest możliwe. Szukasz oprogramowania do zarządzania konfiguracją, takiego jak Puppet lub cfengine, do wypchnięcia / etc / hosts podczas aktualizacji.

Jan
źródło