Fichier «hôtes» Mac OS X, puis-je inclure d'autres fichiers avec lui?

10

Je travaille sur certains scripts d'automatisation pour configurer mes paramètres réseau, le contenu des fichiers hôtes et / etc / resolver, lors de l'accès à différents réseaux que je fréquente entre.

Il peut y avoir certaines combinaisons qui nécessitent toutes des modifications du fichier hosts, et j'aimerais éviter d'avoir à configurer une matrice de combinaisons différentes, en dupliquant les paramètres partagés partout.

Par exemple, je peux être sur le réseau de travail, ce est à dire. dans le bâtiment, ou je peux y accéder via VPN. Dans les deux cas, j'ai besoin d'ajouter certains paramètres au fichier hosts pour que le réseau fonctionne correctement, certains sont partagés, d'autres non. De plus, si je suis sur VPN, je peux être à la maison, auquel cas il y a d'autres paramètres dans le fichier hosts que je veux également ajouter.

En tant que tel, j'espérais qu'au lieu de créer un fichier pour "maison, accéder au travail via VPN" vs "maison, ne pas accéder au travail", etc., est-il possible pour moi d'inclure d'autres fichiers?

Par exemple, supposons que la syntaxe hypothétique suivante fonctionne:

#!include home.hosts
#!include work.hosts

127.0.0.1 localhost
::1 localhost

De cette façon, je pourrais simplement effacer le contenu d'un ou des deux de ces deux fichiers supplémentaires et laisser le reste.

Ou, sauf cela, y a-t-il une meilleure façon de le faire que de simplement créer un petit script qui concatène des fichiers tels que ceux dans un nouveau fichier d'hôtes, et dans le cadre de ma configuration d'automatisation, j'efface d'abord certains de ces fichiers supplémentaires, puis j'invoque le script pour reconstruire le fichier d'hôtes unique à partir de ces fichiers supplémentaires?

Lasse V. Karlsen
la source
Êtes-vous sûr de vouloir modifier le fichier hosts par opposition à, par exemple, modifier dscldirectement les entrées d'hôte via ?
Daniel Beck
Je n'étais pas au courant de la dsclcommande, je devrai également faire des recherches à ce sujet.
Lasse V. Karlsen
Voir par exemple ici . En interne, OS X utilise ses services d'annuaire, que vous pouvez contrôler en utilisant dscl, pour lesquels il /etc/hostss'agit simplement d'une des sources de données disponibles, fournissant (bien sûr) des mappages de nom d'hôte / adresse IP. La configuration d'un script qui écrit dsclet vide le cache peut fonctionner mieux dans votre situation que de conserver plusieurs copies du fichier hosts ou de le réécrire tout le temps.
Daniel Beck
@DanielBeck: Bon point! Je n'étais pas au courant de toutes les capacités de dscl.
Karolos
Faites-moi savoir comment cela fonctionne, si vous voulez essayer de le faire de cette façon. Je ne l'ai pas essayé moi-même, donc je ne le poste pas comme réponse. Bonne chance!
Daniel Beck

Réponses:

7

Je ne suis au courant d'aucune possibilité d'inclusion. Ce que je ferais, cependant, est de créer des sections dans mon fichier hosts, puis d'utiliser un script pour commenter les lignes de chaque section en utilisant, par exemple, sed.

De cette façon, votre fichier ressemblerait

#%%%HOME.HOSTS%%%
#Put here the contents of home.hosts
#%%%WORK.HOSTS%%%
#Put here the contents of work.hosts

#%%%ALWAYS_ON%%%
127.0.0.1 localhost
::1 localhost

Modifier: ajout d'une tentative rapide de modification des champs.

Suppression du commentaire pour HOME.HOSTS

 sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts

Remettre les commentaires pour HOME.HOSTS

 sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^\([^#]\)/#\1/g' hosts

Il s'agit d'une version de base et doit être adaptée à vos besoins.

Karolos
la source
Bonjour Karolos, pourriez-vous nous en dire plus sur la commande: sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostset sur la section du fichier hosts s'il vous plaît. Je ne comprends vraiment pas pourquoi :(
Toan Nguyen
@NNToan: Ce que la ligne fait, c'est dire sedd'ajouter ou de supprimer un # au début des lignes entre deux # %%% lignes. Cela commentera ou dé-commentera les lignes. L'exemple montre comment commenter la section HOME.HOSTS en utilisant # %%% HOME.HOSTS; vous devez utiliser # %%% WORK.HOSTS à la place dans la commande sed pour commenter ou annuler le commentaire de la section WORK.HOSTS.
Karolos
0

Étant donné que dscl ne fonctionne plus en raison du passage à OpenDirectoryService, une option consiste à utiliser fantôme:

sudo gem install ghost

sudo ghost add fw.test.se 10.0.0.1

... ajoutera cette section dans / etc / hosts:

# ghost start
10.0.0.1 fw.start.se
# ghost end

Pour effacer la section #ghost du fichier d'hôtes, utilisez (cela facilite le remplacement de la liste des hôtes par une nouvelle):

sudo ghost empty

Vous pouvez trouver plus d'informations sur fantôme ici: https://github.com/bjeanes/ghost

Campell
la source
0

J'ai eu un cas d'utilisation similaire lorsque j'avais besoin d'accéder à des services sur trois endroits différents en utilisant différents paramètres LAN / WAN dans le fichier hosts. La réponse de Karolos ci-dessus est une solution possible. Mon approche est ici.

1- ref à http://apple.stackexchange.com/q/139267/74657

2- Fichiers hôtes créés pour chaque emplacement (hosts.work, hosts.home, hosts.vendor)

3- En utilisant le script de soloz, ici ( https://github.com/slozo/Network-listener ) chaque fois que je me connecte au réseau domestique, j'exécute un script simple pour changer le fichier hosts.

la méthode la plus simple serait

mv hosts.home /etc/hosts

Alternativement, vous pouvez automatiser la réponse de Karolos ci-dessus en utilisant sed pour mettre à jour le fichier sortant lors de la connexion à un SSID spécifique que vous pouvez détecter et exécuter facilement en utilisant le script de soloz mentionné ci-dessus.

espérons que cela aide toute personne à tomber sur le sujet.

user728650
la source