Mac OS X "hosts", ¿puedo incluir otros archivos con él?

10

Estoy trabajando en algunos scripts de automatización para configurar la configuración de mi red, el contenido de los archivos de host y / etc / resolver archivos, cuando accedo a diferentes redes que frecuenta.

Pueden ocurrir algunas combinaciones que requieren cambios en el archivo de hosts, y me gustaría evitar tener que configurar una matriz de combinaciones diferentes, duplicando las configuraciones compartidas por todas partes.

Por ejemplo, puedo estar en la red de trabajo, es decir. en el edificio, o puedo acceder a través de VPN. En ambos casos, necesito agregar algunas configuraciones al archivo de hosts para que la red funcione correctamente, algunas son compartidas, otras no. Además, si estoy sobre VPN, puedo estar en casa, en cuyo caso hay otras configuraciones en el archivo de hosts que también quiero agregar.

Como tal, esperaba que en lugar de crear un archivo para "inicio, acceder al trabajo a través de VPN" frente a "inicio, no acceder al trabajo", etc., ¿hay alguna forma de incluir otros archivos?

Por ejemplo, digamos que la siguiente sintaxis hipotética funciona:

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

127.0.0.1 localhost
::1 localhost

De esta manera, podría simplemente borrar el contenido de uno, o ambos, de esos dos archivos adicionales, y dejar el resto.

O, salvo eso, ¿hay una mejor manera de hacer esto que simplemente construir un pequeño script que concatena archivos como esos en un nuevo archivo de hosts, y como parte de mi configuración de automatización, primero borro algunos de esos archivos adicionales, y luego invoco el script para reconstruir el archivo de hosts individuales a partir de esos archivos adicionales

Lasse V. Karlsen
fuente
¿Está seguro de que necesita cambios en el archivo de hosts en lugar de, por ejemplo, modificar las entradas de host dscldirectamente?
Daniel Beck
No estaba al tanto del dsclcomando, tendré que investigar sobre eso también.
Lasse V. Karlsen
Ver, por ejemplo, aquí . Internamente, OS X usa sus servicios de directorio, que puede controlar usando dscl, para lo cual /etc/hostses simplemente una de las fuentes de datos disponibles, proporcionando (por supuesto) asignaciones de nombre de host / dirección IP. Configurar una secuencia de comandos que escriba dscly vacíe la memoria caché podría funcionar mejor en su situación que mantener varias copias del archivo de hosts o reescribirlo todo el tiempo.
Daniel Beck
@DanielBeck: ¡Buen punto! No estaba al tanto de todas las capacidades de dscl.
Karolos
Déjame saber cómo funciona, si quieres intentar hacerlo de esa manera. No lo he probado yo mismo, así que no lo publico como respuesta. ¡Buena suerte!
Daniel Beck

Respuestas:

7

No conozco ninguna posibilidad de inclusión. Sin embargo, lo que haría es crear secciones en mi archivo de hosts y luego usar un script para comentar las líneas en cada sección usando, por ejemplo, sed.

De esta manera su archivo se vería así

#%%%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

Editar: Agregar en un intento rápido de modificar los campos.

Eliminando el comentario para HOME.HOSTS

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

Volver a poner los comentarios para HOME.HOSTS

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

Esta es una versión básica y debe ajustarse a sus necesidades.

Karolos
fuente
Hola Karolos, ¿podría describir más sobre el comando: sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostsy sobre la sección en el archivo de hosts por favor? Realmente no entiendo por qué :(
Toan Nguyen
@NNToan: lo que hace la línea es decirle sedque agregue o elimine un # al comienzo de las líneas entre dos líneas # %%%. Esto comentará o descomentará las líneas. El ejemplo muestra cómo comentar la sección HOME.HOSTS usando # %%% HOME.HOSTS; en su lugar, debe usar # %%% WORK.HOSTS en el comando sed para comentar o descomentar la sección WORK.HOSTS.
Karolos
0

Dado que dscl ya no funciona debido al cambio a OpenDirectoryService, una opción es usar ghost:

sudo gem install ghost

sudo ghost add fw.test.se 10.0.0.1

... agregará esta sección en / etc / hosts:

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

Para borrar la sección #ghost del uso del archivo de hosts (esto facilita el reemplazo de la lista de hosts por una nueva):

sudo ghost empty

Puede encontrar más información sobre fantasmas aquí: https://github.com/bjeanes/ghost

Campell
fuente
0

Tuve un caso de uso similar cuando necesitaba acceder a servicios en tres lugares diferentes usando diferentes configuraciones de LAN / WAN en el archivo de hosts. La respuesta de Karolos anterior es una posible solución. Mi acercamiento está aquí.

1- refiérase a http://apple.stackexchange.com/q/139267/74657

2- archivos host creados para cada ubicación (hosts.work, hosts.home, hosts.vendor)

3- Usando el script de soloz, aquí ( https://github.com/slozo/Network-listener ) cada vez que me conecto a la red doméstica, ejecuto un script simple para cambiar el archivo de hosts.

el método más simple sería

mv hosts.home /etc/hosts

alternativamente, puede automatizar la respuesta de Karolos anterior utilizando sed para actualizar el archivo existente al conectarse a un SSID específico que puede detectar y ejecutar fácilmente utilizando el script de soloz mencionado anteriormente.

Espero que esto ayude a cualquiera que se encuentre con el tema.

usuario728650
fuente