Plik hostów dla użytkownika

16

Czy istnieje sposób definiowania aliasów hosta (np. In /etc/hosts) dla poszczególnych użytkowników, tj. W pliku /home/user/.hosts?

Moim głównym celem jest łatwe udostępnianie aliasów hosta za pośrednictwem rsync między komputerami w mojej małej sieci LAN. Ponieważ nie ma maszyny, która byłaby zawsze niezawodnie podłączona, serwer DNS nie jest opcją (prawda?).

Dziękuję Ci.

mrucci
źródło
2
Och wow. Już miałem opublikować to samo pytanie, ale widzę, że masz. Ma to dla mnie sens, ale o dziwo nie istnieje w Linuksie. W moim przypadku mam uwięzioną formę Linuksa z systemem Android na moim urządzeniu Samsung Galaxy Tab, a ze względu na moje tworzenie stron internetowych często muszę edytować / etc / hosts. W uwięzionym systemie Linux nie można edytować plików / etc / hosts. Więc ~ / .hosts byłoby naprawdę fajnie mieć, zdecydowanie!
ServerChecker,
znalazłeś jakieś rozwiązanie?
quis
Niestety nie. Może nie jest to możliwe, ponieważ stanowi zagrożenie bezpieczeństwa.
mrucci
1
W przypadku SSH można użyć aliasów jako częściowego obejścia. Wstaw alias ssh="ssh ".bashrc (zwróć uwagę na końcowe białe znaki na końcu aliasu) wraz z, alias myhost="[email protected]"a następnie możesz powiedzieć ssh myhosti będzie działać.
Noah Sussman,
Lepszym sposobem obejścia tego problemu byłoby umieszczenie wpisu w ~/.ssh/configmiejscu, w którym dodajesz linie: Host my-hosti Hostname 10.0.0.xxx<- IP komputera.
Zaletą

Odpowiedzi:

8

Lepszym rozwiązaniem byłoby zainstalowanie Avahi i libnss-mdns, a następnie użycie HOSTNAME.localadresów.

Te nazwy nie byłyby przypadające na użytkownika, ale rozwiązałyby ustalony cel posiadania wspólnych nazw dla wszystkich komputerów w sieci LAN.

Miś
źródło
Czy istnieje sposób na określenie HOSTNAMES.local w pliku lokalnym (na użytkownika) zamiast w / etc / avahi / hosts?
mrucci
Myślę, że Teddy oznacza, że ​​każda maszyna miałaby nazwę, którą odkryłaby Avahi. Czy mapowanie nazwy komputera naprawdę powinno się różnić w zależności od użytkownika?
pjc50,
nie, nie powinno się różnić w zależności od użytkownika. Potrzebuję tylko metody udostępniania aliasów hosta (w sposób, który pozwala mi to zrobić ping hostnameAlias) bez uprawnień roota. Avahi prawie wykonuje dobrą robotę, ponieważ mogę użyć komputera $ HOSTNAME jako aliasu. Dla ciekawości: gdzie odbywa się to mapowanie?
mrucci,
3

Zobacz https://github.com/figiel/hosts, aby dowiedzieć się, jak zrobić dokładnie to, o co prosisz.

Jest to mała biblioteka załadowana przez LD_PRELOAD, która zastępuje gethostbyname () i kilka powiązanych funkcji używanych przez programy do rozpoznawania nazw DNS. To działa dobrze dla mnie. Jedynym zastrzeżeniem, które znalazłem, jest to, że przeglądarka Chrome nie używa natywnego rozpoznawania DNS, ale zamiast tego implementuje własnego klienta DNS. Aby rozwiązać ten problem, musisz wyłączyć klienta DNS Chrome .

Boris Bukh
źródło
2

Implementacja glibc dla Linuksa nie może tego zrobić.

Ale możesz rozszerzyć go o bibliotekę nss, która mogłaby. Byłoby to łatwe do napisania, ponieważ można oderwać odpowiednią część libc, która znajduje się w katalogu nss_files w

http://ftp.gnu.org/gnu/glibc/glibc-2.5.tar.bz2

Na przykład

Byłoby to jednak dość dziwne, niestandardowe działanie.

MarkR
źródło
0

Jak opisują inne odpowiedzi na tej stronie, istnieją sposoby na uzyskanie podobnej funkcjonalności, ale:

Nie, /etc/hostsw systemie GNU / Linux nie ma pliku typu „na użytkownika”, ani w żaden inny sposób zastępujący domyślną metodę rozpoznawania nazw jako użytkownik nieuprzywilejowany.

daveloyall
źródło
-1

O wiele łatwiej byłoby napisać skrypt, który sprawdza, które hosty są uruchomione, a następnie ustawia nazwę hosta dla następującego polecenia rsync. Coś takiego

#! / usr / bin / sh

HOST = „brak”
TESTFILE = / tmp / testfile. $$
dotknij $ TESTFILE
dla i in hosta hostb hostc olivia
robić
    scp $ TESTFILE $ i: / tmp
    jeśli [$? -eq 0]
    następnie
        HOST = $ i
    fi
gotowy
rm $ TESTFILE

jeśli [$ HOST! = "none"]
następnie
    echo $ HOST jest aktywne
    rsync -av --rsh = pliki ssh $ HOST: / dest
jeszcze
    echo „Nie znaleziono hosta”
    wyjście 1
fi

Jest to niesprawdzone i ma założenia, więc musisz go zmodyfikować, aby pasował.

goryl
źródło
Dziękuję za odpowiedź, ale starałem się rozwiązać inny problem: jak przechowywać i udostępniać listę nazw hostów (hosta hostb hostc olivia) w folderze domowym użytkownika, tak że mogę pisaćrsync src olivia:/dst
mrucci