Come Aggiornare IP e Hostname su Ubuntu tramite Bash

Ci sono diversi modi per gestire l’indirizzo IP e il nome host del tuo computer Ubuntu. Gli amministratori di sistema hanno a disposizione gli strumenti nmcli, netplan, hostname e hostnamectl. Sebbene questi strumenti siano efficaci da soli, come puoi utilizzarli per migliorare l’automazione?

Puoi creare uno script Bash che si occupi della configurazione per te. In questo articolo imparerai come impostare un nuovo nome host e configurare le informazioni sull’indirizzo IP, tutto con uno script Bash che accetta input.

Ogni esempio si baserà sull’altro. Alla fine dell’articolo, avrai le conoscenze necessarie per creare uno script di configurazione completamente funzionale in Bash da utilizzare su un host Ubuntu nuovo o esistente.

Prerequisiti

Non è necessario essere esperti nello scripting della shell Bash per seguire questo tutorial, ma assicurati di soddisfare i seguenti requisiti.

  • A host running on Ubuntu. This tutorial uses Ubuntu 22.04 LTS.
  • Privilegi di root sull’host Ubuntu.
  • A text editor, such as vim, nano, or VSCode.

Impostazione del nome host con hostnamectl

Ogni host dovrebbe avere un nome univoco. Utilizzando il comando hostnamectl puoi interrogare o cambiare il nome host. In questo caso, la sintassi è come mostrato di seguito per cambiare il nome host corrente con quello desiderato.

sudo hostnamectl set-hostname "new-hostname"

Eseguire il comando hostnamectl con il parametro comune set-hostname seguito da un valore di stringa tra virgolette (“”) come nuovo nome host. Se stessi eseguendo questo comando manualmente, dovrebbe funzionare senza problemi.

Ma cosa succede se vuoi inserirlo in uno script che accetta l’input dell’utente? Inizia utilizzando il comando read, seguito dal parametro -p, che sta per prompt, e una stringa per indicare all’utente cosa inserire per questo prompt. Successivamente, salvi l’input in una nuova variabile chiamata NEW_HOSTNAME.

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

Una volta che il nome host è memorizzato nella variabile NEW_HOSTNAME, puoi fornire la variabile al comando hostnamectl come nell’esempio seguente.

sudo hostnamectl set-hostname "$NEW_HOSTNAME"

E questo è tutto! Combinando questi due comandi in una sola riga consente al tuo script di funzionare! Ma hai un compito aggiuntivo: configurare le opzioni di rete.

Impostare le informazioni sull’indirizzo IP con netplan

Il comando netplan è il metodo de facto per gestire le informazioni sull’indirizzo IP di un’interfaccia di rete per gli host Ubuntu moderni. Lo strumento netplan astrae le configurazioni di rete da vari backend utilizzando file di configurazione YAML.

Lo strumento netplan legge questi file di configurazione durante l’avvio del sistema e li applica alle interfacce di rete di destinazione. Ma perché è importante, potresti chiederti?

Avere la configurazione della tua rete in YAML ti permette di iniziare a salvare o fare il backup della tua configurazione in un repository Git. E poiché Git fornisce capacità di tracciamento delle modifiche, puoi utilizzare lo stesso file di configurazione senza doverlo ricreare per le distribuzioni future utilizzando i pipeline CI / CD. Sai, DevOps!

Prima di aggiungere righe a un file di configurazione, devi creare il file di configurazione utilizzando il comando touch.

sudo touch ~/99-custom.yaml

Il comando sopra posizionerà il nuovo file di configurazione nella tua directory home. Da qui, eseguirai il comando echo per eco ciò che scrivi e iniettare quello nel file di configurazione riga per riga utilizzando la ridirezione dell’input per STDOUT > (aggiungi) e >> (aggiungi).

Nota: Utilizza doppi spazi e non tabulazioni per l’indentazione 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

Con ogni comando echo, costruisci la configurazione YAML utilizzando gli spazi appropriati ridirigendo l’input utilizzando STDOUT. In alternativa, potresti costruire questo file manualmente utilizzando un editor di testo. Ma non è necessario costruire il file manualmente.

Invece, chiedi all’utente di inserire le informazioni sull’indirizzo IP di cui hai bisogno utilizzando lo stesso comando read.

Suggerimento: Un modo per elencare tutte le informazioni sull’interfaccia di rete su Ubuntu è eseguire il comando 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

Questo è meglio. Ora puoi reindirizzare nuovamente l’input dell’utente a diverse variabili per l’uso in uno script.

Ci sono molte altre proprietà che puoi impostare che questo tutorial non copre in dettaglio. Se desideri vedere ulteriori proprietà comuni, assicurati di leggere le pagine man di netplan.

Con le opzioni di rete completate, è ora di costruire un singolo script!

Mettendo Tutto Insieme in uno Script Bash

Ora, combinerai tutto in un unico script Bash con ciò che hai appreso dalle sezioni precedenti. Apri l’editor di tua scelta, incolla il codice qui sotto e salva il file come ~/host_deploy.sh.

#! /usr/bin/env bash
# host_deploy.sh
# Descrizione:
# Per l'uso con il modello ovf del server Ubuntu. Presuppone un'immagine cloud Ubuntu e un account sudo predefinito.
# Questo script è destinato ad essere eseguito con sudo.
# Esempio:
# sudo bash ~/host_deploy.sh

# Raccogli input dall'utente
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

# Imposta un nuovo nome host
sudo hostnamectl set-hostname "$NEW_HOSTNAME"

# Crea un nuovo file di configurazione yaml netplan
sudo touch ~/99-custom.yaml

# Applica la configurazione di rete al file di configurazione yaml netplan
# Si fanno alcune ipotesi qui sul nome dell'adattatore
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

# Copia la configurazione personalizzata nella cartella netplan e applica
sudo cp ~/99-custom.yaml /etc/netplan/99-custom.yaml

# Applica la nuova configurazione
sudo netplan apply

# Promemoria per riavviare per ripristinare lo stato
echo "Please restart to complete host deployment!!"

Per eseguire lo script, esegui il comando sottostante per richiamare lo script con bash nel tuo terminale.

sudo bash ~/host_deploy.sh

Lo script ti richiede di inserire un nuovo nome host e informazioni sull’indirizzo IP e ti ricorda di riavviare l’host affinché le modifiche abbiano effetto.

Ora che hai uno script funzionante nella tua directory utente, potresti creare un’immagine golden da riutilizzare o condividere con tecnici e coloro che eseguono regolarmente questo compito.

Conclusione

Congratulazioni! Sei arrivato alla fine dell’articolo e hai costruito uno script Bash completamente funzionale che puoi utilizzare ripetutamente.

Potresti anche provare ad utilizzare questo script con Ansible e rispondere alle domande utilizzando un play di Ansible. I compiti in questo tutorial sono solo un piccolo esempio di elementi di configurazione iniziali che potresti iniziare ad utilizzare nei tuoi script di creazione e distribuzione.

Ora sai come accettare l’input dell’utente, impostare parametri di sistema di base utilizzando uno script Bash e applicare questa tecnica per cambiare nomi host e indirizzi IP in Ubuntu Linux.

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