Tutoriel Linux

Débutant2 min de lecture

Linuxサーバーの名前変更は、SSHプロンプトに表示されるテキストを変更するだけではありません。名前は、 /etc/hostsDNS、証明書、監視、バックアップ、または車両台帳。

ホスト名ctl システム名は変更されますが、DNSゾーンや、古い名前でマシンを識別しているツールは変更されません。そのため、変更前にこれらの依存関係をメモしておき、変更後に一つずつ確認することをお勧めします。

TuxはDNSネットワーク検証中にサーバーのIDを置き換える
システムホスト名、ローカル解決、およびDNSは個別に確認する必要があります。

サーバーの現在の名前とアドレスをメモしてください。

まず、SSH セッションを開いたままにしておきます。サーバーがリモートにある場合は、ホスティング プロバイダにバックアップ コンソールがあることも確認してください。ホスト名を変更しても通常は SSH はシャットダウンされませんが、 /etc/hostsDNSや自動化によって再接続が複雑になる場合がある。

hostnamectl status
ホスト名
ホスト名 -f
cat /etc/hostname
getent hosts "$(hostname)"
ip -br アドレス

ホスト名 カーネルが使用する名前を表示します。 /etc/hostname systemd によって管理されるシステムで起動時にロードされる静的な名前が含まれています。 ホスト名 -f ローカル解決によって完全修飾名を取得しようとします。失敗した場合、または予期しない結果が返された場合は、すぐに変更を強制せず、まず確認してください。 /etc/hosts そしてDNS。

サーバーが実際に使用するアドレスにも注意してください。 Linuxにおけるip addr これにより、インターフェースアドレス、使用されるルート、およびNATによって提供されるパブリックIPアドレスを区別することができます。

書き込みを行う前に、修正が必要になる可能性のある2つのファイルを保存してください。

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

hostnamectlを使用してホスト名を変更します。

短く、安定していて、DNSと互換性のある名前を選択してください。例: srv-app-02スペース、アクセント記号、アンダースコア、および変更される可能性のあるIPアドレスを表す名前は避けてください。静的ホスト名は、DHCP経由で取得した一時的な名前よりも優先されます。

sudo hostnamectl set-hostname srv-app-02
hostnamectl status
ホスト名
cat /etc/hostname

ターゲット設定オプションがない場合、 hostnamectl set-hostname きれいな名前、静的な名前、一時的な名前を更新します。サーバーの場合、次のような短い名前になります。 srv-app-02 システムのホスト名とFQDNの混同を避ける srv-app-02.example.netのマニュアルページ ホスト名ctl これら3つのレベルについて詳しく説明します。

このコマンドはすぐに有効になります。ただし、新しいシェルが開かれるまで、SSH セッションのプロンプトには古い名前が残る場合があります。プロンプトを更新するためだけにサーバーを再起動しないでください。代わりに、2 番目のセッションを開いて、以下のコマンドの出力を比較してください。 ホスト名

ローカル解決を壊さずに/etc/hostsを修正する

ホスト名ctl 書き換えないでください /etc/hostsファイルを変更する前に、古い名前を検索してください。

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

Debian と Ubuntu では、 127.0.1.1 これは、FQDNとショートネームをローカルに関連付けるためによく使用されます。

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

安定したプライベートアドレスを持つサーバーでは、例えば、そのアドレスと直接関連付けられたものを見つけることができます。 192.0.2.25 srv-app-02.example.net srv-app-02テンプレートを無作為にコピーしないでください。既にマシンを指定している行のみを修正し、エントリはそのままにしてください。 ローカルホスト IPv4とIPv6。

getent hosts srv-app-02
getent hosts srv-app-02.example.net
ホスト名 -f

ゲテント クエリは、 /etc/nsswitch.confそのため、考慮に入れる /etc/hostsDNS、そして環境によってはLDAPなどの情報源も利用します。これは単にファイルを読み込むよりも、より実態に近い情報を提供します。

正引きDNSと逆引きDNSをそれぞれ個別に更新します。

新しいローカル名では、DNSレコードは作成されません。影響を受けるゾーンで、Aレコード、AAAAレコード(該当する場合)、および管理している場合はPTRレコードを追加または変更してください。移行中は、古いレコードをアプリケーションがまだ使用している場合は保持し、検証後に削除してください。

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

これらのテストは別のマシンから実行し、必要に応じて複数のリゾルバを使用してください。 Linux で掘る ローカルDNS、パブリックサーバー、および権威サーバーを、キャッシュをランダムにクリアすることなく比較する方法を示します。

正しい DNS があっても、すべてが準備完了というわけではありません。TLS 証明書、古い FQDN を含む構成ファイル、および名前ベースのファイアウォール ルールを確認してください。SSH の場合、新しい名前への接続は引き続きサーバーのホスト キーを使用しますが、新しい論理エントリが作成されます。 既知のホスト指紋を承認する前に、照合してください。

名前変更後のSSH、ログ、監視の制御

最初のSSH接続を閉じずに、新しいFQDNを使用して2つ目のSSH接続を開きます。その後、変更に関連するサービス障害やメッセージを確認します。

hostnamectl status
systemctl --失敗
journalctl -u systemd-hostnamed --since "-15 minutes" --no-pager
journalctl --since "-15 minutes" --no-pager | grep -iE 'hostname|srv-app-01|srv-app-02'

変更前の行に古い名前が残っているのは正常です。重要なのは、新しいイベントで使用されている名前です。すべてのサービスを自動的に再起動しないでください。まず、ログ記録、バックアップ、監視エージェントなど、起動時にホスト名を明示的に宣言するサービスを確認してください。

監視ツールで、古いマシンがオフラインになった際に、新しい空のホストとしてマシンが表示されないことを確認してください。インベントリ、バックアップ、アラートについても同様のチェックを行ってください。そうしないと、Linux側での名前変更が成功すると、これらのプラットフォーム上に2つの別々のオブジェクトが作成される可能性があります。

再起動後に古いホスト名が戻ってきた場合

名前が以前の値に戻った場合は、再起動する前にプロビジョニングレイヤーを確認してください。 ホスト名ctlクラウドイメージは、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

hostnamectl status

ホスティングコントロールパネル、Terraform、Ansible、またはVMを管理する初期化スクリプトも確認してください。起動のたびに修正するのではなく、根本的な原因となっている箇所を修正してください。名前が安定したら、再度チェックを行ってください。 ゲテント掘るSSH、ログ、監視機能を使えば、サーバー名が変更されたことが、この変更が実際に関係するすべての場所で確認できます。

sudo apt update && sudo apt upgrade