Comment mettre à jour l’adresse IP et le nom d’hôte d’Ubuntu via Bash

Il existe plusieurs façons de gérer l’adresse IP et le nom d’hôte de votre ordinateur Ubuntu. Les administrateurs système disposent des outils nmcli, netplan, hostname et hostnamectl. Bien que ces outils fassent un excellent travail individuellement, comment pouvez-vous les intégrer pour améliorer votre automatisation?

Vous pouvez créer un script Bash qui gérera la configuration pour vous. Dans cet article, vous apprendrez comment définir un nouveau nom d’hôte et configurer les informations d’adresse IP, le tout avec un script Bash qui accepte des entrées.

Chaque exemple s’appuiera sur le précédent. À la fin de l’article, vous aurez les connaissances nécessaires pour créer un script de configuration entièrement fonctionnel en Bash, à utiliser sur un hôte Ubuntu neuf ou existant.

Prérequis

Vous n’avez pas besoin d’être un expert en script Shell Bash pour suivre ce tutoriel, mais assurez-vous de disposer des éléments suivants.

  • A host running on Ubuntu. This tutorial uses Ubuntu 22.04 LTS.
  • Privilèges root sur l’hôte Ubuntu.
  • A text editor, such as vim, nano, or VSCode.

Définir le nom d’hôte avec hostnamectl

Chaque hôte devrait avoir un nom unique. Utiliser la commande hostnamectl vous permet de consulter ou de changer le nom d’hôte. Dans cet exemple, la syntaxe est comme indiqué ci-dessous pour changer votre nom d’hôte actuel selon vos préférences.

sudo hostnamectl set-hostname "new-hostname"

Exécutez la commande hostnamectl avec le paramètre commun set-hostname suivi d’une valeur de chaîne entre guillemets («  ») comme nouveau nom d’hôte. Si vous exécutiez cette commande manuellement, elle devrait fonctionner sans problème.

Mais que se passerait-il si vous vouliez intégrer cela dans un script qui accepte une entrée utilisateur? Commencez par utiliser la commande read, suivie du paramètre -p, qui signifie invite, et d’une chaîne pour indiquer à l’utilisateur ce qu’il doit saisir pour cette invite. Ensuite, enregistrez l’entrée dans une nouvelle variable appelée NOUVEAU_NOM_HOTE.

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

Une fois que le nom d’hôte est stocké dans la variable NOUVEAU_NOM_HOTE, vous pouvez fournir la variable à la commande hostnamectl comme dans l’exemple ci-dessous.

sudo hostnamectl set-hostname "$NEW_HOSTNAME"

Et voilà! En combinant ces deux commandes en une seule ligne, les commandes fonctionnent dans un script! Mais, vous avez une tâche supplémentaire : configurer les options réseau.

Configuration des informations d’adresse IP avec netplan

La commande netplan est la méthode de facto pour gérer les informations d’adresse IP d’une interface réseau pour les hôtes Ubuntu modernes. L’outil netplan abstrait les configurations réseau à partir de différents backends en utilisant des fichiers de configuration YAML.

L’outil netplan lit ces fichiers de configuration lors du démarrage du système et les applique aux interfaces réseau cibles. Pourquoi est-ce important, vous pourriez demander?

Avoir votre configuration réseau en YAML vous permet de commencer à sauvegarder ou à sauvegarder votre configuration dans un dépôt Git. Et comme Git fournit des capacités de suivi des modifications, vous pouvez utiliser ce même fichier de configuration sans avoir à le recréer pour les déploiements futurs en utilisant des pipelines CI / CD. Vous savez, DevOps !

Avant d’ajouter des lignes à un fichier de configuration, vous devez créer le fichier de configuration en utilisant la commande touch.

sudo touch ~/99-custom.yaml

La commande ci-dessus placera le nouveau fichier de configuration dans votre répertoire personnel. À partir de là, vous exécuterez la commande echo pour echo ce que vous tapez et injecter cela dans le fichier de configuration ligne par ligne en utilisant la redirection d’entrée pour STDOUT > (ajouter) et >> (ajouter en tant que suite).

Remarque : Utilisez des doubles espaces et non des tabulations pour l’indentation en 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

Avec chaque commande echo, vous construisez la configuration YAML en utilisant un espacement approprié en redirigeant l’entrée à l’aide de STDOUT. Alternativement, vous pourriez construire ce fichier manuellement en utilisant un éditeur de texte. Mais, vous n’avez pas besoin de construire le fichier manuellement.

Au lieu de cela, demandez à l’utilisateur d’entrer les informations d’adresse IP dont vous avez besoin en utilisant la même commande read.

Astuce : Un moyen de répertorier toutes les informations sur l’interface réseau sur Ubuntu est d’exécuter la commande 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

C’est mieux. Vous pouvez maintenant rediriger à nouveau l’entrée utilisateur vers quelques variables pour une utilisation dans un script.

Il existe de nombreuses autres propriétés que vous pouvez définir, mais qui ne sont pas détaillées dans ce tutoriel. Si vous souhaitez voir des propriétés communes supplémentaires, assurez-vous de lire les pages man de netplan.

Avec les options réseau complètes, il est temps de construire un seul script !

Réunissez tout dans un script Bash

Maintenant, combinez tout dans un seul script Bash avec ce que vous avez appris des sections précédentes. Ouvrez votre éditeur préféré, collez le code ci-dessous et enregistrez le fichier sous ~/host_deploy.sh.

#! /usr/bin/env bash
# host_deploy.sh
# Description:
# À utiliser avec le modèle OVF du serveur Ubuntu. Suppose l'image cloud Ubuntu et le compte sudo par défaut.
# Ce script est destiné à être exécuté avec sudo.
# Exemple:
# sudo bash ~/host_deploy.sh

# Rassembler les entrées de l'utilisateur
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

# Définir un nouveau nom d'hôte
sudo hostnamectl set-hostname "$NEW_HOSTNAME"

# Créer un nouveau fichier de configuration yaml pour netplan
sudo touch ~/99-custom.yaml

# Appliquer la configuration réseau au fichier de configuration yaml pour netplan
# Faire quelques hypothèses ici sur le nom de l'adaptateur
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

# Copier la configuration personnalisée dans le dossier netplan et l'appliquer
sudo cp ~/99-custom.yaml /etc/netplan/99-custom.yaml

# Appliquer la nouvelle configuration
sudo netplan apply

# Rappel de redémarrer pour réinitialiser l'état
echo "Please restart to complete host deployment!!"

Pour exécuter le script, exécutez la commande ci-dessous pour invoquer le script avec bash dans votre terminal.

sudo bash ~/host_deploy.sh

Le script vous invite à saisir un nouveau nom d’hôte et des informations sur l’adresse IP et vous rappelle de redémarrer l’hôte pour que les modifications prennent effet.

Maintenant que vous avez un script fonctionnel dans votre répertoire utilisateur, vous pourriez créer une image d’or à réutiliser ou à partager avec les techniciens et ceux qui effectuent régulièrement cette tâche.

Conclusion

Félicitations! Vous êtes arrivé à la fin de l’article et avez construit un script Bash entièrement fonctionnel que vous pouvez utiliser à plusieurs reprises.

Vous pourriez également essayer d’utiliser ce script avec Ansible et répondre aux questions en utilisant une tâche Ansible. Les tâches de ce tutoriel ne sont qu’un petit échantillon des éléments de configuration initiaux que vous pourriez commencer à utiliser dans vos scripts de construction et de déploiement.

Vous savez maintenant comment accepter l’entrée utilisateur, définir des paramètres système de base à l’aide d’un script Bash, et appliquer cette technique pour modifier les noms d’hôte et les adresses IP dans Ubuntu Linux.

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