Hosts-Datei pro Benutzer

16

Gibt es eine Möglichkeit, Host-Aliase (wie in /etc/hosts) auf Benutzerbasis, dh in einer Datei, zu definieren /home/user/.hosts?

Mein primäres Ziel ist es, Host-Aliase einfach über Rsync zwischen den Computern in meiner kleinen LAN zu teilen. Da es keinen Rechner gibt, der immer zuverlässig verbunden ist, kommt ein DNS-Server nicht in Frage (oder?).

Vielen Dank.

Mrucci
quelle
2
Oh wow. Ich wollte die gleiche Frage stellen, aber ich sehe, dass Sie haben. Es macht für mich Sinn, aber seltsamerweise existiert es nicht unter Linux. In meinem Fall habe ich eine eingesperrte Form von Linux mit Android-Betriebssystem auf meinem Samsung Galaxy Tab-Gerät, und aufgrund meiner Webentwicklung muss ich häufig / etc / hosts bearbeiten. In einem inhaftierten Linux können Sie / etc / hosts nicht bearbeiten. Also, ein ~ / .hosts wäre wirklich cool, auf jeden Fall!
ServerChecker
Haben Sie am Ende eine Lösung gefunden?
Quamis
Leider nicht. Vielleicht ist es nicht möglich, weil es eine Sicherheitsbedrohung ist.
Mrucci
1
Für SSH können Sie Aliase als teilweise Problemumgehung verwenden. alias ssh="ssh "Fügen Sie Ihre .bashrc ein (beachten Sie das nachstehende Leerzeichen am Ende des Alias), alias myhost="[email protected]"und dann können Sie sagen, ssh myhostund es wird funktionieren.
Noah Sussman
Ein besserer Lösungsansatz wäre, einen Eintrag in das Feld zu setzen, in ~/.ssh/configdem Sie die Zeilen: Host my-hostund Hostname 10.0.0.xxx<- IP des Computers einfügen. Das Schöne ist, dass Sie hier auch den Benutzernamen, den Port, den zu verwendenden Schlüssel usw. angeben können
Ciprian Tomoiagă

Antworten:

8

Eine bessere Lösung wäre, Avahi und libnss-mdns zu installieren und dann HOSTNAME.localAdressen zu verwenden.

Diese Namen sind nicht benutzerspezifisch, lösen jedoch das erklärte Ziel, für alle Computer in einem LAN gemeinsame Namen zu haben.

Teddy
quelle
Gibt es eine Möglichkeit, die Datei HOSTNAMES.local in einer lokalen Datei (pro Benutzer) anstatt in / etc / avahi / hosts anzugeben?
Mrucci
Ich denke, Teddy bedeutet, dass jede Maschine einen Namen haben würde, den Avahi entdecken würde. Sollte die Zuordnung von Maschine zu Name tatsächlich benutzerspezifisch variieren?
pjc50
nein, es sollte nicht auf Benutzerbasis variieren. Ich brauche nur eine Methode zum Teilen von Host-Aliasen (auf eine Weise, die mir erlaubt ping hostnameAlias) ohne Root-Rechte. Avahi macht fast den richtigen Job, weil ich den Rechner $ HOSTNAME als Alias ​​verwenden kann. Nur aus Neugier: Wo wird dieses Mapping gemacht?
Mrucci
3

Unter https://github.com/figiel/hosts erfahren Sie, wie Sie genau das tun, wonach Sie fragen.

Dies ist eine kleine Bibliothek, die über LD_PRELOAD geladen wird und die gethostbyname () und mehrere verwandte Funktionen überschreibt, die Programme für die DNS-Auflösung verwenden. Es funktioniert gut für mich. Die einzige Einschränkung, die ich gefunden habe, ist, dass der Chrome-Webbrowser keine native DNS-Auflösung verwendet, sondern stattdessen einen eigenen DNS-Client implementiert. Um dieses Problem zu lösen, müssen Sie den DNS-Client von Chrome deaktivieren .

Boris Bukh
quelle
2

Die Linux-Glibc-Implementierung kann das nicht.

Aber Sie könnten es mit einer NSS-Bibliothek erweitern, die es könnte. Dies wäre einfach zu schreiben, da Sie den relevanten Teil von libc, der sich im Verzeichnis nss_files in befindet, abreißen könnten

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

Zum Beispiel

Dies wäre jedoch eine ziemlich seltsame Sache, die nicht dem Standard entspricht.

MarkR
quelle
0

Wie die anderen Antworten auf dieser Seite beschreiben, gibt es Möglichkeiten, ähnliche Funktionen zu erzielen, aber:

Nein, es gibt keine "benutzerspezifische" Datei /etc/hostsoder eine andere Möglichkeit, die Standard-Namensauflösung als nicht privilegierter Benutzer in GNU / Linux zu überschreiben.

daveloyall
quelle
-1

Es scheint viel einfacher zu sein, ein Skript zu schreiben, das herausfindet, welche Hosts aktiv sind, und dann den Hostnamen für den folgenden rsync-Befehl festlegt. Etwas wie das

#! / usr / bin / sh

HOST = "none"
TESTFILE = / tmp / testfile. $$
Berühre $ TESTFILE
für ich in hosta hostb hostc olivia
tun
    scp $ TESTFILE $ i: / tmp
    wenn [$? -eq 0]
    dann
        HOST = $ i
    fi
erledigt
rm $ TESTFILE

if [$ HOST! = "none"]
dann
    echo $ HOST ist aktiv
    rsync -av --rsh = ssh files $ HOST: / dest
sonst
    echo "Kein Host gefunden"
    Ausfahrt 1
fi

Dies ist ungetestet und setzt voraus, dass Sie es entsprechend anpassen müssen.

Gorilla
quelle
Vielen Dank für die Antwort, aber ich habe versucht, ein anderes Problem zu lösen: wie man die Liste der Hostnamen (hosta hostb hostc olivia) in einem Benutzer-Home-Ordner speichert und freigibt, so dass ich schreiben kannrsync src olivia:/dst
mrucci