GNU/Linux >> Tutoriels Linux >  >> Linux

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 du bon travail par eux-mêmes, comment pouvez-vous les inclure pour améliorer votre jeu d'automatisation ?

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

Chaque exemple s'appuiera sur l'autre. À la fin de l'article, vous aurez les connaissances nécessaires pour créer un script de configuration entièrement fonctionnel dans Bash à utiliser sur un hôte Ubuntu nouveau ou existant.

Prérequis

Vous n'avez pas besoin d'être un expert en scripts shell Bash pour suivre ce didacticiel, mais assurez-vous d'avoir les exigences suivantes.

  • Un hôte s'exécutant sur Ubuntu. Ce tutoriel utilise Ubuntu 22.04 LTS.
  • Privilèges root sur l'hôte Ubuntu.
  • Un éditeur de texte, tel que vim , nano , ou VSCode .

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

Chaque hôte doit avoir un nom unique. L'utilisation de la commande hostnamectl vous permet d'interroger ou de modifier le nom d'hôte. Dans ce cas, la syntaxe est comme indiqué ci-dessous pour changer votre nom d'hôte actuel en celui que vous désirez.

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, cela devrait fonctionner sans problème.

Mais que se passe-t-il si vous vouliez mettre cela dans un script qui accepte les entrées de l'utilisateur ? Commencez par utiliser la commande de lecture, suivie du paramètre -p, qui signifie prompt, et une chaîne pour dire à un utilisateur ce qu'il faut entrer pour cette invite. Vous enregistrez ensuite l'entrée dans une nouvelle variable, appelée NEW_HOSTNAME.

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

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

sudo hostnamectl set-hostname "$NEW_HOSTNAME"

Et c'est tout! La combinaison de ces deux lignes permet aux commandes de fonctionner 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 de facto méthode de gestion des informations d'adresse IP d'une interface réseau pour les hôtes Ubuntu modernes. L'outil netplan extrait les configurations réseau de divers backends à l'aide de fichiers de configuration YAML.

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

Le fait d'avoir votre configuration réseau dans YAML vous permet de commencer à enregistrer ou à sauvegarder votre configuration dans un référentiel Git. Et puisque Git fournit des fonctionnalités de suivi des modifications, vous pouvez utiliser ce même fichier de configuration sans avoir à le recréer pour de futurs déploiements à l'aide de pipelines CI/CD. Vous savez, DevOps !

Avant d'ajouter des lignes à un fichier de configuration, vous devez créer le fichier de configuration à l'aide de 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 injectez cela dans le fichier de configuration ligne par ligne en utilisant la redirection d'entrée pour STDOUT> (ajouter) et>> (ajouter).

Remarque :Utilisez des espaces doubles et non des tabulations pour l'indentation dans 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 l'espacement approprié en redirigeant l'entrée à l'aide de STDOUT. Vous pouvez également créer ce fichier manuellement à l'aide d'un éditeur de texte. Mais vous n'avez pas besoin de créer le fichier manuellement.

Au lieu de cela, invitez l'utilisateur à saisir les informations d'adresse IP dont vous avez besoin en utilisant le même read commande.

Astuce :Une façon de répertorier toutes les informations d'interface réseau sur Ubuntu consiste à exécuter la commande d'adresse IP.

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 de l'utilisateur vers quelques variables à utiliser dans un script.

Il existe de nombreuses autres propriétés que vous pouvez définir et que ce didacticiel ne couvre pas en détail. Si vous souhaitez voir des propriétés communes supplémentaires, assurez-vous de lire les pages de manuel netplan.

Une fois les options réseau terminées, il est temps de créer un seul script !

Tout rassembler dans un script Bash

Maintenant, vous allez tout combiner dans un seul script Bash avec ce que vous avez appris dans les sections précédentes. Ouvrez l'éditeur de votre choix, collez le code ci-dessous et enregistrez le fichier sous ~/host_deploy.sh .

#! /usr/bin/env bash
# host_deploy.sh
# Description:
# For use with Ubuntu Server ovf template. Assumes Ubuntu Cloud image and default sudo account.
# This script is meant to run with sudo.
# Example:
# sudo bash ~/host_deploy.sh

# Gather input from user
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

# Set a new hostname
sudo hostnamectl set-hostname "$NEW_HOSTNAME"

# Create a new netplan yaml config file
sudo touch ~/99-custom.yaml

# Apply network config to netplan yaml config file
# Making some assumptions here about the adapter name
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

# Copy the custom config to the netplan folder and apply
sudo cp ~/99-custom.yaml /etc/netplan/99-custom.yaml

# Apply the new config
sudo netplan apply

# Reminder to restart to reset state
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 à entrer un nouveau nom d'hôte et une nouvelle adresse IP et vous rappelle de redémarrer l'hôte pour que les modifications prennent effet.

Maintenant que vous avez un script de travail dans votre répertoire utilisateur, vous pouvez créer une image idéale à réutiliser ou à partager avec les techniciens et ceux qui effectuent régulièrement cette tâche.

Conclusion

Toutes nos félicitations! Vous êtes arrivé à la fin de l'article et avez créé un script Bash entièrement fonctionnel que vous pouvez utiliser à plusieurs reprises.

Vous pouvez également essayer d'utiliser ce script avec Ansible et répondre aux questions à l'aide d'un jeu Ansible. Les tâches de ce didacticiel ne sont qu'un petit échantillon des éléments de configuration initiaux que vous pouvez commencer à utiliser dans vos scripts de génération et de déploiement.

Vous savez maintenant accepter les entrées de l'utilisateur, définir les 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.


Linux
  1. Comment faire écho à un coup ! ?

  2. Comment mettre à jour Ubuntu ?

  3. Comment mettre à jour vers Python 2.7 ?

  4. Comment installer et configurer Elasticsearch sur Ubuntu 18.04

  5. Comment bash teste-t-il 'faux'?

Comment mettre à jour Filezilla sur Ubuntu ?

Comment installer Gtop dans CentOS7 et Ubuntu 18.04

Comment installer Grafana sur Ubuntu 18.04 et Debian 8

Comment changer le nom d'hôte du serveur dans Ubuntu

Comment mettre en réseau Ubuntu et Windows 10 ?

Comment installer Intellij IDEA sur Ubuntu ?