Tutoriel Linux

Přejmenování Linuxového serveru pomocí hostnamectl bez narušení DNS

Débutant6 min de lecture

Přejmenování Linuxového serveru se netýká jen změny textu zobrazeného v SSH příkazovém řádku. Název lze také použít v /etc/hosts, DNS, certifikáty, monitorování, zálohy nebo inventář vozového parku.

hostnamectl Změní název systému, ale nezmění vaši DNS zónu ani nástroje, které stále identifikují počítač se starým názvem. Proto doporučuji si tyto závislosti před změnou poznamenat a poté je jednu po druhé zkontrolovat.

Tux nahrazuje identitu serveru během ověřování DNS sítě.
Název hostitele systému, lokální rozlišení a DNS je nutné zkontrolovat samostatně.

Poznamenejte si aktuální název a adresy serveru

Začněte tím, že budete mít otevřenou SSH relaci. Pokud je server vzdálený, ujistěte se také, že máte u svého poskytovatele hostingu záložní konzoli. Změna názvu hostitele obvykle SSH nevypne, ale chyba v /etc/hostsDNS nebo automatizace mohou zkomplikovat opětovné připojení.

stav hostnamectl
název hostitele
jméno hostitele -f
cat /etc/názevhostitele
getent hosts "$(název hostitele)"
IP-br adresa

název hostitele zobrazuje název používaný jádrem. Soubor /etc/názevhostitele obsahuje statický název načtený při spuštění systému spravovaného systemd. Příkaz jméno hostitele -f pokusí se načíst plně kvalifikovaný název pomocí lokálního rozlišení. Pokud selže nebo vrátí neočekávaný výsledek, nevynucujte změnu okamžitě: nejprve zkontrolujte. /etc/hosts a DNS.

Také si všimněte skutečné adresy používané serverem. Průvodce na IP adresa v Linuxu vám pomůže rozlišit adresu rozhraní, použitou trasu a jakoukoli veřejnou IP adresu poskytovanou NAT.

Před zápisem si uložte dva soubory, které je třeba opravit:

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

Změňte název hostitele pomocí příkazu hostnamectl

Vyberte krátký, stabilní a DNS-kompatibilní název, například srv-app-02Vyhněte se mezerám, diakritice, podtržítkům a názvům, které popisují IP adresu, jež se pravděpodobně změní. Statický název hostitele má přednost před přechodným názvem přijatým přes DHCP.

sudo hostnamectl set-hostname srv-app-02
stav hostnamectl
název hostitele
cat /etc/názevhostitele

Bez možností cílení hostnamectl set-hostname aktualizuje názvy „pretty“, „static“ a „transient“. Pro server je vhodný krátký název, například srv-app-02 zabraňuje míchání názvu hostitele systému s jeho FQDN srv-app-02.example.netManuální stránka pro hostnamectl podrobně popisuje tyto tři úrovně.

Příkaz by se měl projevit okamžitě. Váš SSH příkazový řádek si však může ponechat starý název, dokud se neotevře nový shell. Nerestartujte server jen proto, abyste obnovili příkazový řádek. Místo toho otevřete druhou relaci a porovnejte výstup název hostitele.

Oprava souboru /etc/hosts bez narušení lokálního rozlišení

hostnamectl /etc/hostsPřed úpravou souboru vyhledejte starý název:

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

V Debianu a Ubuntu, řádek v 127.0.1.1 se často používá k lokálnímu propojení FQDN a zkráceného názvu:

127.0.0.1 lokální hostitel
127.0.1.1 srv-app-02.example.net srv-app-02

Na serveru se stabilní privátní adresou můžete například najít přímou asociaci s touto adresou 192.0.2.25 srv-app-02.example.net srv-app-02Nekopírujte šablonu náhodně. Opravte pouze řádek, který již označuje stroj, a zadané položky ponechte. localhost IPv4 a IPv6.

getent hosts srv-app-02
getent hosts srv-app-02.example.net
jméno hostitele -f

getent dotazuje se na rozlišení nakonfigurované pomocí /etc/nsswitch.confProto bere v úvahu /etc/hosts, DNS a v závislosti na vašem prostředí i zdroje jako LDAP. Toto je reprezentativnější než pouhé čtení souboru.

Aktualizujte forward a reverse DNS samostatně

Nový lokální název nevytváří žádné záznamy DNS. V dotčené zóně přidejte nebo upravte záznam A, záznam AAAA (pokud je k dispozici) a pokud jej spravujete, také PTR pro danou adresu. Pokud jej stále používají nějaké aplikace, ponechte starý záznam během přechodu a po ověření jej odstraňte.

dig +short A srv-app-02.example.net
dig +krátké AAAA srv-app-02.example.net
dig +short -x 192.0.2.25

Proveďte tyto testy z jiného počítače a v případě potřeby s více resolvery. Článek o kopat pod Linuxem ukazuje, jak porovnat lokální DNS, veřejný server a autoritativní server bez náhodného vyprazdňování mezipamětí.

Správný DNS nezaručuje, že je vše připraveno. Zkontrolujte certifikáty TLS, konfigurační soubory obsahující starý FQDN a pravidla firewallu založená na jménu. V případě SSH připojení k novému jménu stále používá klíč hostitele serveru, ale vytvoří novou logickou položku v známí_hostiteléPřed přijetím otisku prstu jej porovnejte.

Ovládání SSH, protokolů a monitorování po přejmenování

Otevřete druhé SSH připojení s novým FQDN, aniž byste první zavřeli. Poté zkontrolujte selhání služeb a zprávy související se změnou:

stav hostnamectl
systemctl --selhalo
journalctl -u systemd-hostname --od "-15 minut" --no-pager
journalctl --od "-15 minut" --no-pager | grep -iE 'název hostitele|srv-app-01|srv-app-02'

Přítomnost starého názvu v řádcích napsaných před změnou je normální. Důležitý je název použitý v nových událostech. Nerestartujte automaticky všechny služby. Nejprve zkontrolujte ty, které při spuštění explicitně deklarují název hostitele, například některé agenty pro protokolování, zálohování nebo monitorování.

Pokud se po restartu vrátí starý název hostitele

Když se název vrátí na předchozí hodnotu, před restartem zkontrolujte, zda existuje zřizovací vrstva. Cloudový obraz může použít název hostitele při spuštění pomocí 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/názevhostitele
stav hostnamectl

Zkontrolujte také ovládací panel hostingu, Terraform, Ansible nebo inicializační skript, který spravuje virtuální počítač. Opravte zdroj pravdy, místo abyste s ním při každém spuštění bojovali. Jakmile je název stabilní, kontroly opakujte. getent, kopatSSH, logy a monitorování. Pak budete vědět, že server byl přejmenován všude, kde tato změna skutečně záleží.

sudo apt update && sudo apt upgrade