Как обновить IP и имя хоста Ubuntu через Bash

Есть несколько способов управления IP-адресом и именем хоста вашего компьютера под управлением Ubuntu. Системные администраторы могут использовать инструменты nmcli, netplan, hostname и hostnamectl. Несмотря на то, что эти инструменты хорошо справляются сами по себе, как можно интегрировать их для улучшения вашей автоматизации?

Вы можете создать Bash-скрипт, который будет обрабатывать конфигурацию за вас. В этой статье вы узнаете, как установить новое имя хоста и сконфигурировать информацию об IP-адресе, все с помощью Bash-скрипта, который принимает вводные данные.

Каждый пример будет строиться на предыдущем. К концу статьи у вас будет необходимые знания для создания полностью функционального конфигурационного скрипта на Bash для использования на новом или существующем хосте Ubuntu.

Предварительные требования

Вам не обязательно быть экспертом в написании сценариев оболочки Bash, чтобы следовать этому руководству, но убедитесь, что у вас есть следующие требования.

  • A host running on Ubuntu. This tutorial uses Ubuntu 22.04 LTS.
  • Привилегии root на хосте Ubuntu.
  • A text editor, such as vim, nano, or VSCode.

Установка имени хоста с использованием hostnamectl

Каждый хост должен иметь уникальное имя. Используя команду hostnamectl, вы можете запросить или изменить имя хоста. В этом случае синтаксис представлен ниже для изменения текущего имени хоста на желаемое.

sudo hostnamectl set-hostname "new-hostname"

Запуск команды hostnamectl с общим параметром set-hostname, за которым следует строковое значение в двойных кавычках в качестве нового имени хоста. Если бы вы выполняли эту команду вручную, она должна была бы работать без сбоев.

Но что если вы хотите включить это в сценарий, который принимает ввод пользователя? Начните с использования команды read, за которой следует параметр -p, который означает подсказку, и строку, указывающую пользователю, что вводить для этой подсказки. Затем сохраните ввод в новую переменную, называемую NEW_HOSTNAME.

read -p "Please type the desired hostname: " NEW_HOSTNAME

Как только имя хоста сохранено в переменной NEW_HOSTNAME, вы можете передать переменную в команду hostnamectl, как показано в примере ниже.

sudo hostnamectl set-hostname "$NEW_HOSTNAME"

И все! Комбинирование этих двух однострочников позволяет выполнять команды в сценарии! Но у вас есть еще одна задача: настройка сетевых параметров.

Настройка информации об IP-адресе с помощью netplan

Команда netplan является фактическим методом управления информацией об IP-адресе сетевого интерфейса для современных хостов Ubuntu. Инструмент netplan абстрагирует сетевые конфигурации от различных фонов, используя файлы конфигурации YAML.

Инструмент netplan считывает эти файлы конфигурации во время загрузки системы и применяет их к целевому сетевому интерфейсу (интерфейсам). Зачем это важно, вы можете спросить?

Имея вашу конфигурацию сети в формате YAML, вы можете начать сохранять или резервировать вашу конфигурацию в репозиторий Git. И поскольку Git обеспечивает возможности отслеживания изменений, вы можете использовать тот же файл конфигурации без необходимости создавать его заново для будущих развертываний с использованием конвейеров CI / CD. Вы знаете, DevOps!

Перед добавлением строк в файл конфигурации вы должны создать файл конфигурации с помощью команды touch.

sudo touch ~/99-custom.yaml

Вышеприведенная команда поместит новый файл конфигурации в ваш домашний каталог. Затем вы выполните команду echo, чтобы echo то, что вы набираете, и внедрите это построчно в файл конфигурации с использованием перенаправления ввода для STDOUT > (добавление) и >> (добавление).

Примечание: Используйте двойные пробелы, а не табуляцию для отступов в YAML.

echo "network:" > ~/99-custom.yaml
echo "  ethernets:" >> ~/99-custom.yaml
echo "    enp0s31f6:" >> ~/99-custom.yaml
echo "      dhcp4: false" >> ~/99-custom.yaml
echo "      addresses:"
echo "       - [$IP_ADDRESS]" >> ~/99-custom.yaml
echo "      routes:"
echo "       - to: default"
echo "         via: $GATEWAY_ADDRESS" >> ~/99-custom.yaml
echo "      nameservers:" >> ~/99-custom.yaml
echo "        addresses: [$PRIMARY_DNS_ADDRESS, $SECONDARY_DNS_ADDRESS, 208.67.222.222, 208.67.220.220]" >> ~/99-custom.yaml
echo "  version: 2" >> ~/99-custom.yaml

С каждой командой echo вы создаете конфигурацию YAML с правильными отступами, перенаправляя ввод с помощью STDOUT. В качестве альтернативы вы можете создать этот файл вручную с помощью текстового редактора. Но вам не нужно создавать файл вручную.

Вместо этого предложите пользователю ввести информацию о IP-адресе, которая вам нужна, с помощью той же команды read.

Совет: один из способов получить информацию обо всех сетевых интерфейсах в Ubuntu – выполнить команду ip address.

read -p "Now type the IP address in CIDR notation, i.e. 192.168.1.1/24: " IP_ADDRESS
read -p "The gateway IP: " GATEWAY_ADDRESS
read -p "The primary DNS IP: " PRIMARY_DNS_ADDRESS
read -p "And finally, the secondary DNS IP: " SECONDARY_DNS_ADDRESS

Вот лучше. Теперь вы можете снова перенаправить пользовательский ввод в несколько переменных для использования в сценарии.

Есть еще множество других свойств, которые вы можете установить, о которых этот учебник не рассказывает подробно. Если вы хотите увидеть дополнительные распространенные свойства, обязательно прочтите страницы руководства по netplan.

Закончив настройку сети, пришло время создать единый сценарий!

Сборка всего в одном сценарии Bash

Теперь вы объедините все в один сценарий Bash с тем, что вы узнали из предыдущих разделов. Откройте ваш редактор по выбору, вставьте код ниже и сохраните файл как ~/host_deploy.sh.

#! /usr/bin/env bash
# host_deploy.sh
# Описание:
# Для использования с шаблоном ovf сервера Ubuntu. Предполагается образ облачного сервера Ubuntu и учетная запись sudo по умолчанию.
# Этот скрипт предназначен для запуска с правами sudo.
# Пример:
# sudo bash ~/host_deploy.sh

# Сбор информации от пользователя
read -p "Please type the desired hostname: " NEW_HOSTNAME
read -p "Now type the IP address in CIDR notation, i.e. 192.168.1.1/24: " IP_ADDRESS
read -p "The gateway IP: " GATEWAY_ADDRESS
read -p "The primary DNS IP: " PRIMARY_DNS_ADDRESS
read -p "And finally, the secondary DNS IP: " SECONDARY_DNS_ADDRESS

# Установить новое имя хоста
sudo hostnamectl set-hostname "$NEW_HOSTNAME"

# Создать новый конфигурационный файл yaml для netplan
sudo touch ~/99-custom.yaml

# Применить конфигурацию сети к файлу конфигурации yaml для netplan
# Здесь делаются некоторые предположения о имени адаптера
echo "network:" > ~/99-custom.yaml
echo "  ethernets:" >> ~/99-custom.yaml
echo "    enp0s31f6:" >> ~/99-custom.yaml
echo "      dhcp4: false" >> ~/99-custom.yaml
echo "      addresses:"
echo "       - [$IP_ADDRESS]" >> ~/99-custom.yaml
echo "      routes:"
echo "       - to: default"
echo "         via: $GATEWAY_ADDRESS" >> ~/99-custom.yaml
echo "      nameservers:" >> ~/99-custom.yaml
echo "        addresses: [$PRIMARY_DNS_ADDRESS, $SECONDARY_DNS_ADDRESS, 208.67.222.222, 208.67.220.220]" >> ~/99-custom.yaml
echo "  version: 2" >> ~/99-custom.yaml

# Скопировать пользовательскую конфигурацию в папку netplan и применить
sudo cp ~/99-custom.yaml /etc/netplan/99-custom.yaml

# Применить новую конфигурацию
sudo netplan apply

# Напоминание о перезапуске для сброса состояния
echo "Please restart to complete host deployment!!"

Чтобы выполнить скрипт, выполните нижеприведенную команду для вызова скрипта с помощью bash в вашем терминале.

sudo bash ~/host_deploy.sh

Скрипт попросит вас ввести новое имя хоста и информацию об IP-адресе и напомнит вам перезагрузить хост, чтобы изменения вступили в силу.

Теперь у вас есть рабочий скрипт в вашем пользовательском каталоге, который можно использовать для создания золотого образа для повторного использования или обмена с техниками и теми, кто регулярно выполняет эту задачу.

Заключение

Поздравляем! Вы добрались до конца статьи и создали полностью функциональный сценарий Bash, который вы можете использовать многократно.

Вы также можете попробовать использовать этот сценарий с Ansible и отвечать на вопросы, используя плейбук Ansible. Задачи в этом руководстве представляют собой лишь маленький образец начальных конфигурационных элементов, которые вы можете начать использовать в своих сценариях сборки и развертывания.

Теперь вы знаете, как принимать ввод пользователя, устанавливать основные системные параметры с помощью сценария Bash и применять эту технику для изменения имен хостов и IP-адресов в Ubuntu Linux.

Source:
https://adamtheautomator.com/change-linux-ip-hostname-bash-script/