Arquivo "hosts" do Mac OS X, posso incluir outros arquivos?

10

Estou trabalhando em alguns scripts de automação para definir minhas configurações de rede, hospedar o conteúdo do arquivo e / etc / resolvedor, ao acessar redes diferentes que frequento.

Existem algumas combinações que podem exigir alterações no arquivo hosts, e eu gostaria de evitar a necessidade de configurar uma matriz de combinações diferentes, duplicando as configurações compartilhadas em todo o lugar.

Por exemplo, eu posso estar na rede de trabalho, ou seja. no prédio, ou eu posso acessá-lo através da VPN. Nos dois casos, preciso adicionar algumas configurações ao arquivo hosts para que a rede funcione corretamente, algumas são compartilhadas, outras não. Além disso, se eu estou usando a VPN, posso estar em casa; nesse caso, há outras configurações no arquivo de hosts que também quero adicionar.

Como tal, eu esperava que, em vez de criar um arquivo para "casa, acesso ao trabalho pela VPN" vs. "casa, não acesso ao trabalho" etc., houvesse uma maneira de incluir outros arquivos?

Por exemplo, digamos que a seguinte sintaxe hipotética funcione:

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

127.0.0.1 localhost
::1 localhost

Dessa forma, eu poderia simplesmente limpar o conteúdo de um ou de ambos os arquivos extras e deixar o resto.

Ou, exceto, existe uma maneira melhor de fazer isso do que apenas criar um pequeno script que concatene arquivos como aqueles em um novo arquivo de hosts e, como parte da minha configuração de automação, limpei primeiro alguns desses arquivos extras, e então invoco o script para reconstruir o arquivo de hosts únicos a partir desses arquivos extras?

Lasse V. Karlsen
fonte
Tem certeza de que precisa de alterações no arquivo hosts em vez de, por exemplo, modificar as entradas do host dscldiretamente?
Daniel Beck
Eu não estava ciente do dsclcomando, vou ter que pesquisar sobre isso também.
Lasse V. Karlsen
Veja, por exemplo, aqui . Internamente, o OS X usa seus serviços de diretório, que você pode controlar usando dscl, dos quais /etc/hostsé simplesmente uma das fontes de dados disponíveis, fornecendo (é claro) mapeamentos de nome de host / endereço IP. A configuração de um script que grava dscle libera o cache pode funcionar melhor em sua situação do que manter várias cópias do arquivo hosts ou reescrevê-lo o tempo todo.
Daniel Beck
@DanielBeck: Bom ponto! Eu não estava ciente de todos os recursos do dscl.
Karolos
Deixe-me saber como funciona, se você quiser fazer dessa maneira. Ainda não tentei, por isso não o posto como resposta. Boa sorte!
Daniel Beck

Respostas:

7

Não conheço nenhuma possibilidade de inclusão. O que eu faria, no entanto, é criar seções no meu arquivo hosts e, em seguida, usar um script para comentar as linhas em cada seção usando, por exemplo, sed.

Dessa forma, seu arquivo ficaria assim

#%%%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: adicionando uma tentativa rápida de modificar os campos.

Removendo o comentário para HOME.HOSTS

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

Retornando os comentários para HOME.HOSTS

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

Esta é uma versão básica e precisa ser ajustada às suas necessidades.

Karolos
fonte
Olá Karolos, você poderia descrever mais sobre o comando: sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostse sobre a seção no arquivo hosts, por favor. Eu realmente não entendo o porquê :(
Toan Nguyen
@NNToan: o que a linha faz é dizer sedpara adicionar ou remover um # no início das linhas entre duas linhas # %%%. Isso irá comentar ou cancelar o comentário das linhas. O exemplo mostra como comentar a seção HOME.HOSTS usando # %%% HOME.HOSTS; você deve usar # %%% WORK.HOSTS no comando sed para comentar ou cancelar o comentário da seção WORK.HOSTS.
Karolos
0

Como o dscl não está mais funcionando devido à mudança para o OpenDirectoryService, uma opção é usar o ghost:

sudo gem install ghost

sudo ghost add fw.test.se 10.0.0.1

... adicionará esta seção no / etc / hosts:

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

Para limpar a seção #ghost do arquivo de hosts, use (isso facilita a substituição da lista de hosts por uma nova):

sudo ghost empty

Você pode encontrar mais informações sobre o fantasma aqui: https://github.com/bjeanes/ghost

Campell
fonte
0

Eu tive um caso de uso semelhante quando precisei acessar serviços em três locais diferentes usando configurações diferentes de LAN / WAN no arquivo de hosts. A resposta de Karolos acima é uma solução possível. Minha abordagem está aqui.

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

2 - arquivos hosts criados para cada local (hosts.work, hosts.home, hosts.vendor)

3- Usando o script do soloz, aqui ( https://github.com/slozo/Network-listener ) sempre que eu conectar à rede doméstica, eu executo um script simples para alternar o arquivo hosts.

método mais simples seria

mv hosts.home /etc/hosts

Como alternativa, você pode automatizar a resposta de Karolos acima usando sed para atualizar o arquivo existente ao se conectar a um SSID específico, que você pode detectar e executar facilmente usando o script de soloz mencionado acima.

espero que ajude alguém que tropeça no assunto.

user728650
fonte