Tutoriel Linux

Rinominare un server Linux con hostnamectl senza compromettere il DNS

Débutant5 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Rinominare un server Linux non significa solo cambiare il testo visualizzato nel prompt SSH. Il nome può essere utilizzato anche in /etc/hosts, DNS, certificati, monitoraggio, backup o inventario della flotta.

hostnamectl Questa modifica cambia il nome del sistema, ma non la zona DNS né gli strumenti che identificano ancora la macchina con il vecchio nome. Pertanto, ti consiglio di prendere nota di queste dipendenze prima di procedere con la modifica e di verificarle una per una.

Tux sostituisce l'identità di un server durante la verifica della rete DNS
Il nome host del sistema, la risoluzione locale e il DNS devono essere verificati separatamente.

Annota il nome e gli indirizzi attuali del server

Inizia mantenendo aperta una sessione SSH. Se il server è remoto, assicurati anche di avere una console di backup presso il tuo provider di hosting. La modifica del nome host normalmente non arresta SSH, ma un errore in /etc/hostsIl DNS o l’automazione possono complicare la riconnessione.

stato hostnamectl
nome host
nome host -f
cat /etc/hostname
getent hosts "$(hostname)"
indirizzo ip-br

nome host visualizza il nome utilizzato dal kernel. Il file /etc/hostname nome host -f Tenta di recuperare il nome completo tramite risoluzione locale. Se l’operazione fallisce o restituisce un risultato inatteso, non forzare immediatamente la modifica: verificare prima. /etc/hosts e DNS.

Si noti inoltre l’indirizzo effettivo utilizzato dal server. La guida su indirizzo IP in Linux ti aiuterà a distinguere l’indirizzo dell’interfaccia, il percorso utilizzato e qualsiasi indirizzo IP pubblico fornito da un NAT.

Prima di iniziare a scrivere, salva i due file che potrebbero necessitare di correzioni:

sudo cp -a /etc/hostname "/etc/hostname.bak-$(date +%F-%H%M)"
sudo cp -a /etc/hosts "/etc/hosts.bak-$(date +%F-%H%M)"

Modifica il nome host utilizzando hostnamectl

Scegli un nome breve, stabile e compatibile con DNS, ad esempio srv-app-02Evita spazi, accenti, trattini bassi e nomi che descrivono un indirizzo IP soggetto a modifiche. Un nome host statico ha la precedenza su un nome temporaneo ricevuto tramite DHCP.

sudo hostnamectl set-hostname srv-app-02
stato hostnamectl
nome host
cat /etc/hostname

Senza opzioni di targeting, hostnamectl set-hostname aggiorna i nomi belli, statici e transitori. Per un server, un nome breve come srv-app-02 evita di confondere il nome host del sistema con il suo FQDN srv-app-02.example.netLa pagina di manuale per hostnamectl descrive in dettaglio questi tre livelli.

Il comando dovrebbe avere effetto immediatamente. Tuttavia, il prompt della sessione SSH potrebbe conservare il vecchio nome fino all’apertura di una nuova shell. Non riavviare il server solo per aggiornare il prompt. Invece, apri una seconda sessione e confronta l’output di nome host.

Correggere il file /etc/hosts senza compromettere la risoluzione locale.

hostnamectl non riscrivere Prima di modificare il file, verifica il nome precedente:

[:space:]grep -nE '(^|[])srv-app-01([]|$)' /etc/hosts[:space:]
sudoedit /etc/hosts

127.0.1.1 viene spesso utilizzato per associare localmente il FQDN e il nome breve:

127.0.0.1 localhost
127.0.1.1 srv-app-02.example.net srv-app-02

Su un server con un indirizzo privato stabile, è possibile trovare un’associazione diretta con tale indirizzo, ad esempio 192.0.2.25 srv-app-02.example.net srv-app-02Non copiare un modello a caso. Correggi solo la riga che già designa la macchina e mantieni le voci localhost IPv4 e IPv6.

getent hosts srv-app-02
getent hosts srv-app-02.example.net
nome host -f

getent interroga la risoluzione configurata da /etc/nsswitch.confPertanto tiene conto /etc/hosts, DNS e, a seconda del tuo ambiente, fonti come LDAP. Questo è più rappresentativo della semplice lettura del file.

Il nuovo nome locale non crea alcun record DNS. Nella zona interessata, aggiungi o modifica il record A, il record AAAA (se applicabile) e, se lo gestisci, il record PTR per l’indirizzo. Mantieni il vecchio record durante la transizione se qualche applicazione lo sta ancora utilizzando, quindi rimuovilo dopo la verifica.

dig +short A srv-app-02.example.net
dig +breve AAAA srv-app-02.example.net
dig +short -x 192.0.2.25

Eseguire questi test da un’altra macchina e, se necessario, con più resolver. L’articolo su scavare sotto Linux Mostra come confrontare il DNS locale, un server pubblico e il server autorevole senza svuotare casualmente le cache.

Un DNS corretto non garantisce che tutto sia pronto. Controlla i certificati TLS, i file di configurazione contenenti il ​​vecchio FQDN e le regole del firewall basate sul nome. Per SSH, una connessione al nuovo nome utilizza ancora la chiave host del server, ma crea una nuova voce logica in host_conosciutiConfronta l’impronta digitale prima di accettarla.

Controllo SSH, log e monitoraggio dopo la ridenominazione

Apri una seconda connessione SSH con il nuovo FQDN senza chiudere la prima. Quindi verifica la presenza di servizi non funzionanti e messaggi relativi alla modifica:

stato hostnamectl
systemctl --non riuscito
journalctl -u systemd-hostnamed --since "-15 minutes" --no-pager
journalctl --since "-15 minutes" --no-pager | grep -iE 'hostname|srv-app-01|srv-app-02'

La presenza del vecchio nome nelle righe scritte prima della modifica è normale. Ciò che conta è il nome utilizzato nei nuovi eventi. Non riavviare automaticamente tutti i servizi. Prima, verifica quelli che dichiarano esplicitamente il nome host all’avvio, come ad esempio alcuni agenti di logging, backup o monitoraggio.

Nel tuo strumento di monitoraggio, verifica che la macchina non venga visualizzata come un nuovo host vuoto mentre quella precedente risulta offline. Esegui lo stesso controllo per l’inventario, i backup e gli avvisi. In caso contrario, una ridenominazione riuscita sul lato Linux potrebbe creare due oggetti separati su tali piattaforme.

Se il vecchio nome host viene ripristinato dopo il riavvio

Quando il nome torna al suo valore precedente, verifica la presenza di un livello di provisioning prima di riavviare. hostnamectlUn’immagine cloud può applicare il nome host all’avvio tramite cloud-init:

grep -R "preserve_hostname" /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg.d 2>/dev/null
journalctl -b -u cloud-init --no-pager
cat /etc/hostname
stato hostnamectl

Verifica anche il pannello di controllo dell’hosting, Terraform, Ansible o lo script di inizializzazione che gestisce la macchina virtuale. Correggi la fonte di verità invece di contrastarla a ogni avvio. Una volta che il nome è stabile, ripeti i controlli. getent, scavareSSH, log e monitoraggio. In questo modo saprai che il server è stato rinominato ovunque questa modifica sia effettivamente rilevante.

sudo apt update && sudo apt upgrade