Hoe Ubuntu IP en Hostname bijwerken via Bash

Er zijn verschillende manieren om het IP-adres en de hostnaam van uw Ubuntu-computer te beheren. Systeembeheerders hebben de beschikking over de tools nmcli, netplan, hostname en hostnamectl. Hoewel deze tools op zichzelf goed werken, hoe kunt u deze tools opnemen om uw automatisering te verbeteren?

U kunt een Bash-script maken dat de configuratie voor u afhandelt. In dit artikel leert u hoe u een nieuwe hostnaam instelt en IP-adresinformatie configureert, allemaal met een Bash-script dat invoer accepteert.

Elk voorbeeld bouwt voort op het vorige. Tegen het einde van het artikel heeft u de benodigde kennis om een volledig functioneel configuratiescript in Bash te maken voor gebruik op een nieuwe of bestaande Ubuntu-host.

Vereisten

U hoeft geen expert te zijn in Bash-shell-scripting om deze tutorial te volgen, maar zorg ervoor dat u aan de volgende eisen voldoet.

  • A host running on Ubuntu. This tutorial uses Ubuntu 22.04 LTS.
  • Rootrechten voor de Ubuntu-host.
  • A text editor, such as vim, nano, or VSCode.

De Hostnaam instellen met hostnamectl

Elke host moet een unieke naam hebben. Met het hostnamectl-commando kunt u de hostnaam opvragen of wijzigen. In dit geval is de syntaxis zoals hieronder weergegeven om uw huidige hostnaam te wijzigen naar wat u maar wilt.

sudo hostnamectl set-hostname "new-hostname"

Het uitvoeren van het hostnamectl commando met de gemeenschappelijke parameter set-hostname gevolgd door een stringwaarde tussen dubbele (“”) aanhalingstekens als de nieuwe hostnaam. Als je dit commando handmatig zou uitvoeren, zou het zonder problemen moeten werken.

Maar wat als je dit in een script wilt plaatsen dat gebruikersinvoer accepteert? Begin met het gebruiken van het leescommando, gevolgd door de parameter -p, wat staat voor prompt, en een string om een gebruiker te vertellen wat hij voor deze prompt moet invoeren. Vervolgens sla je de invoer op in een nieuwe variabele, genaamd NEW_HOSTNAME.

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

Zodra de hostnaam is opgeslagen in de variabele NEW_HOSTNAME, kun je de variabele doorgeven aan het hostnamectl commando zoals het voorbeeld hieronder.

sudo hostnamectl set-hostname "$NEW_HOSTNAME"

En dat is het! Door deze twee éénregelige commando’s te combineren, kunnen de commando’s in een script werken! Maar, je hebt nog een aanvullende taak: het configureren van de netwerkopties.

Het instellen van de IP-adresinformatie met netplan

Het netplan commando is de de facto methode voor het beheren van de IP-adresinformatie van een netwerkinterface voor moderne Ubuntu-hosts. De netplan tool abstracteert netwerkconfiguraties van verschillende back-ends met behulp van YAML-configuratiebestanden.

De netplan tool leest deze configuratiebestanden tijdens het opstarten van het systeem en past ze toe op de doelnetwerkinterface(s). Waarom is dat belangrijk, vraag je je misschien af?

Het hebben van uw netwerkconfiguratie in YAML stelt u in staat om te beginnen met het opslaan of back-uppen van uw configuratie naar een \texttt{Git}-repository. En aangezien Git mogelijkheden biedt voor het bijhouden van wijzigingen, kunt u hetzelfde configuratiebestand gebruiken zonder het opnieuw te hoeven maken voor toekomstige implementaties met behulp van CI / CD-pipelines. U weet wel, DevOps!

Voordat u regels toevoegt aan een configuratiebestand, moet u het configuratiebestand maken met het \texttt{touch}-commando.

sudo touch ~/99-custom.yaml

Met het bovenstaande commando wordt het nieuwe configuratiebestand in uw home-directory geplaatst. Vanaf hier voert u het \texttt{echo}-commando uit om in te voegen wat u typt in het configuratiebestand, regel voor regel met behulp van invoorredirectie voor STDOUT \textgreater (toevoegen) en \textgreater\textgreater (toevoegen).

Let op: Gebruik dubbele spaties en geen tabs voor inspringen in 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

Met elk \texttt{echo}-commando bouwt u de YAML-configuratie op met de juiste spatiering door invoer om te leiden met STDOUT. U kunt dit bestand ook handmatig opbouwen met een teksteditor. Maar het is niet nodig om het bestand handmatig op te bouwen.

In plaats daarvan vraagt u de gebruiker om de benodigde IP-adresinformatie in te voeren met hetzelfde \texttt{read}-commando.

Tip: Een manier om alle netwerkinterface-informatie op Ubuntu weer te geven, is door het \texttt{ip address}-commando uit te voeren.

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

Dat is beter. U kunt nu de gebruikersinvoer opnieuw doorsturen naar een paar variabelen voor gebruik in een script.

Er zijn veel andere eigenschappen die u kunt instellen, die deze handleiding niet in detail behandelt. Als u aanvullende veelvoorkomende eigenschappen wilt zien, lees dan de netplan man-pagina’s.

Met de voltooide netwerkmogelijkheden is het tijd om een enkel script te maken!

Alles samenvoegen in een Bash-script

Nu zult u alles combineren in een enkel Bash-script met wat u hebt geleerd van de vorige secties. Open uw favoriete teksteditor, plak de onderstaande code en sla het bestand op als ~/host_deploy.sh.

#! /usr/bin/env bash
# host_deploy.sh
# Beschrijving:
# Voor gebruik met Ubuntu Server ovf-sjabloon. Gaat uit van Ubuntu Cloud-image en standaard sudo-account.
# Dit script moet worden uitgevoerd met sudo.
# Voorbeeld:
# sudo bash ~/host_deploy.sh

# Verzamel invoer van de gebruiker
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

# Stel een nieuwe hostnaam in
sudo hostnamectl set-hostname "$NEW_HOSTNAME"

# Maak een nieuw netplan yaml-configuratiebestand aan
sudo touch ~/99-custom.yaml

# Pas netwerkconfiguratie toe op het netplan yaml-configuratiebestand
# Hier worden enkele aannames gedaan over de adapternaam
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

# Kopieer de aangepaste configuratie naar de netplan-map en pas toe
sudo cp ~/99-custom.yaml /etc/netplan/99-custom.yaml

# Pas de nieuwe configuratie toe
sudo netplan apply

# Herinnering om opnieuw op te starten om de status te resetten
echo "Please restart to complete host deployment!!"

Om het script uit te voeren, voert u de onderstaande opdracht uit om het script op te roepen met bash in uw terminal.

sudo bash ~/host_deploy.sh

Het script vraagt u om een nieuwe hostnaam en IP-adresinformatie in te voeren en herinnert u eraan de host opnieuw op te starten zodat de wijzigingen van kracht worden.

Nu u een werkend script in uw gebruikersdirectory hebt, kunt u een gouden image maken om te hergebruiken of te delen met technici en degenen die routinematig deze taak uitvoeren.

Conclusie

Gefeliciteerd! Je hebt het einde van het artikel bereikt en een volledig functioneel Bash-script gebouwd dat je herhaaldelijk kunt gebruiken.

Je kunt ook proberen dit script te gebruiken met Ansible en de vragen beantwoorden met behulp van een Ansible-play. De taken in deze tutorial zijn slechts een klein voorbeeld van initiële configuratie-items die je zou kunnen beginnen te gebruiken in je build- en implementatiescripts.

Je weet nu hoe je gebruikersinvoer kunt accepteren, basis systeemparameters kunt instellen met behulp van een Bash-script, en die techniek kunt toepassen om hostnamen en IP-adressen te wijzigen in Ubuntu Linux.

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