Fichier d'hôtes par utilisateur

16

Existe-t-il un moyen de définir des alias d'hôte (comme dans /etc/hosts) par utilisateur, c'est-à-dire dans un fichier /home/user/.hosts?

Mon objectif principal est de partager facilement des alias d'hôte via rsync entre les machines de mon petit réseau local. Comme il n'y a pas de machine qui sera toujours connectée de manière fiable, un serveur DNS n'est pas une option (non?).

Je vous remercie.

mrucci
la source
2
Oh wow. J'étais sur le point de poster cette même question, mais je vois que vous avez. Cela a du sens pour moi, mais étrangement, il n'existe pas sur Linux. Dans mon cas, j'ai une forme emprisonnée de Linux avec Android OS sur mon appareil Samsung Galaxy Tab, et à cause de mon développement Web, j'ai souvent besoin de modifier / etc / hosts. Dans un Linux emprisonné, vous ne pouvez pas modifier / etc / hosts. Donc, un ~ / .hosts serait vraiment cool d'avoir, certainement!
ServerChecker
avez-vous finalement trouvé une solution?
quamis
Malheureusement non. Ce n'est peut-être pas possible car c'est une menace pour la sécurité.
mrucci
1
Pour SSH, vous pouvez utiliser des alias comme solution de contournement partielle. Mettez alias ssh="ssh "votre .bashrc (notez les espaces blancs à la fin de l'alias) avec alias myhost="[email protected]"et ensuite vous pouvez dire ssh myhostet cela fonctionnera.
Noah Sussman
Une meilleure approche pour contourner ce problème serait de mettre une entrée dans votre ~/.ssh/configoù vous ajoutez les lignes: Host my-hostet Hostname 10.0.0.xxx<- IP de la machine. La bonne chose est qu'il vous permet également de spécifier le nom d'utilisateur, le port, la clé à utiliser, etc.
Ciprian Tomoiagă

Réponses:

8

Une meilleure solution serait d'installer Avahi et libnss-mdns, puis d'utiliser des HOSTNAME.localadresses.

Ces noms ne seraient pas par utilisateur, mais résoudraient votre objectif déclaré d'avoir des noms communs pour toutes les machines d'un réseau local.

Teddy
la source
Existe-t-il un moyen de spécifier HOSTNAMES.local dans un fichier local (par utilisateur) plutôt que dans / etc / avahi / hosts?
mrucci
Je pense que Teddy signifie que chaque machine aurait un nom qu'Avahi découvrirait. Le mappage machine-à-nom doit-il vraiment varier en fonction de l'utilisateur?
pjc50
non, il ne doit pas varier en fonction des utilisateurs. J'ai juste besoin d'une méthode pour partager des alias d'hôte (d'une manière qui me permette de le faire ping hostnameAlias) sans privilèges root. Avahi fait presque le bon travail, car je peux utiliser la machine $ HOSTNAME comme alias. Juste pour la curiosité: où se fait cette cartographie?
mrucci
3

Voir https://github.com/figiel/hosts pour un moyen de faire exactement ce que vous demandez.

Il s'agit d'une petite bibliothèque, chargée via LD_PRELOAD et qui remplace gethostbyname () et plusieurs fonctions connexes que les programmes utilisent pour la résolution DNS. Cela fonctionne bien pour moi. La seule mise en garde que j'ai trouvée est que le navigateur Web Chrome n'utilise pas la résolution DNS native, mais implémente plutôt son propre client DNS. Pour résoudre ce problème, vous devez désactiver le client DNS de Chrome .

Boris Bukh
la source
2

L'implémentation de la glibc Linux ne peut pas faire cela.

Mais vous pouvez l'étendre avec une bibliothèque nss qui le pourrait. Ce serait facile à écrire car vous pourriez arracher la partie pertinente de libc qui se trouve dans le répertoire nss_files de

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

Par exemple

Ce serait, cependant, une chose non standard assez étrange à faire.

MarkR
la source
0

Comme le décrivent les autres réponses de cette page, il existe des moyens d'obtenir des fonctionnalités similaires, mais:

Non, il n'y a pas de fichier "par utilisateur" comme /etc/hostsou de toute autre manière pour remplacer la résolution de nom par défaut en tant qu'utilisateur non privilégié dans GNU / Linux.

daveloyall
la source
-1

Il semblerait beaucoup plus facile d'écrire un script qui détermine quels hôtes sont actifs, puis définit le nom d'hôte pour la commande rsync suivante. Quelque chose comme ça

#! / usr / bin / sh

HOST = "aucun"
TESTFILE = / tmp / testfile. $$
touchez $ TESTFILE
pour i in hosta hostb hostc olivia
faire
    scp $ TESTFILE $ i: / tmp
    si [$? -eq 0]
    ensuite
        HÔTE = $ i
    Fi
terminé
rm $ TESTFILE

si [$ HOST! = "none"]
ensuite
    echo $ HOST est en place
    rsync -av --rsh = fichiers ssh $ HOST: / dest
autre
    echo "Aucun hôte trouvé"
    sortie 1
Fi

Ceci n'est pas testé et a des hypothèses, vous devrez donc le modifier en fonction.

gorille
la source
Merci pour la réponse, mais j'essayais de résoudre un autre problème: comment stocker et partager la liste des noms d'hôte (hosta hostb hostc olivia) dans un dossier de départ utilisateur, de sorte que je puisse écrirersync src olivia:/dst
mrucci