Я работаю над некоторыми скриптами автоматизации для настройки параметров сети, содержимого файлов hosts и файлов /etc/resolver при доступе к различным сетям, между которыми я часто бываю.
Существуют некоторые комбинации, которые могут потребовать внесения изменений в файл hosts, и мне бы хотелось избежать необходимости настраивать матрицу различных комбинаций, дублируя общие настройки повсюду.
Например, я могу бытьнарабочая сеть, т. е. в здании, или я могу получить к ней доступ через VPN. В обоих случаях мне нужно добавить некоторые настройки в файл hosts для правильной работы сети, некоторые из них общие, некоторые нет. Кроме того, если я использую VPN, я могу быть дома, в этом случае в файле hosts есть некоторые другие настройки, которые ятакжехочу добавить.
Таким образом, я надеялся, что вместо создания одного файла для «дома, доступ к работе через VPN» и «дома, нет доступа к работе» и т. д., есть ли способ включить другие файлы?
Например, предположим, что работает следующий гипотетический синтаксис:
#!include home.hosts
#!include work.hosts
127.0.0.1 localhost
::1 localhost
Таким образом, я мог бы просто очистить содержимое одного или обоих из этих двух дополнительных файлов, а остальное оставить как есть.
Или, если это не так, есть ли лучший способ сделать это, чем просто создать небольшой скрипт, который объединяет такие файлы в новый файл hosts, и в рамках моей настройки автоматизации сначала очистить некоторые из этих дополнительных файлов, а затем вызвать скрипт для перестройки одного файла hosts из этих дополнительных файлов?
решение1
Я не знаю о возможности включения. Однако я бы сделал разделы в моем файле hosts, а затем использовал бы скрипт для комментирования строк в каждом разделе, используя, например, sed.
Таким образом, ваш файл будет выглядеть так
#%%%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
Редактировать:Добавляю быструю попытку изменить поля.
Удаление комментария для HOME.HOSTS
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts
Возвращаем комментарии для HOME.HOSTS
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^\([^#]\)/#\1/g' hosts
Это базовая версия, которую необходимо настроить в соответствии с вашими потребностями.
решение2
Поскольку dscl больше не работает из-за перехода на OpenDirectoryService, одним из вариантов является использование ghost:
sudo gem install ghost
sudo ghost add fw.test.se 10.0.0.1
...добавит этот раздел в /etc/hosts:
# ghost start
10.0.0.1 fw.start.se
# ghost end
Чтобы очистить раздел #ghost файла hosts, используйте (это позволит легко заменить список хостов новым):
sudo ghost empty
Более подробную информацию о привидении можно найти здесь: https://github.com/bjeanes/ghost
решение3
У меня был похожий случай использования, когда мне нужно было получить доступ к службам в трех разных местах, используя разные настройки LAN / WAN в файле hosts. Ответ Каролоса выше — одно из возможных решений. Мой подход здесь.
1- ссылка наhttp://apple.stackexchange.com/q/139267/74657
2- созданы файлы хостов для каждого местоположения (hosts.work, hosts.home, hosts.vendor)
3- Используя скрипт soloz, здесь (https://github.com/slozo/Network-listener) всякий раз, когда я подключаюсь к домашней сети, я запускаю простой скрипт для переключения файла hosts.
Самый простой метод —
mv hosts.home /etc/hosts
в качестве альтернативы вы можете автоматизировать ответ Каролоса выше, используя sed для обновления существующего файла при подключении к определенному SSID, который вы можете легко обнаружить и запустить с помощью скрипта soloz, упомянутого выше.
надеюсь, это поможет любому, кто столкнется с этой проблемой.