Ubuntuのホスト名を変更する方法【hostnamectl使用】

システム管理

VPSを借りてUbuntuをセットアップするとき、初期状態のホスト名は localhost や意味不明な英数字になっていることがほとんどです。サーバーを複数台持つようになると「どのサーバーで作業しているのか」が分からなくなるため、早めにホスト名を自分のサービス名やロールに合わせて変更することをおすすめします

この記事では Ubuntu 24.04 LTS 標準の hostnamectl コマンドを使ったホスト名の変更手順を解説します。Docker公式イメージ ubuntu:24.04 で実際に /etc/hostname の書き換えと /etc/hosts の更新を確認したデータを使っています。

結論からいうと、sudo hostnamectl set-hostname 新しいホスト名 の1行で変更でき、再起動は不要です。

この記事のポイント

  • hostnamectl set-hostname は再起動なしで即座に反映される(systemd 標準機能)
  • Ubuntu 24.04 の systemd バージョンは 255(22.04 は 249)で、どちらも hostnamectl 対応
  • /etc/hostname/etc/hosts の両方を更新しないと名前解決が崩れる
  • VPS の SSH 接続で「ホスト名が変わったが鍵が変わっていない」と警告が出る場合は known_hosts を更新する
  • ホスト名に使える文字は英数字とハイフンのみ(RFC 952 準拠)。日本語・スペースは使えない

前提環境

この記事は以下の環境で動作を確認しています。

  • OS:Ubuntu 24.04 LTS(Noble Numbat)/ Ubuntu 22.04 LTS でも手順は同じ
  • 検証方法:Docker公式イメージ ubuntu:24.04/etc/hostname の書き換えを実確認
  • systemd バージョン:255(Ubuntu 24.04)/ 249(Ubuntu 22.04)
  • 権限:sudo 権限のあるユーザー(または root)

注意

本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 22.04 でも同じ手順で変更できますが、hostnamectl の表示項目が一部異なります。

ホスト名とは何か、なぜ変更が必要か

Linuxの「ホスト名(hostname)」はそのコンピューターを識別するための名前です。hostname コマンドで表示でき、/etc/hostname ファイルに格納されています。

特にVPSを使ったサーバー運用では、次のようなケースでホスト名を変えたくなります。

  • 複数のVPSを管理していて、SSH接続後のプロンプト(user@サーバー名:~$)でどのサーバーかを判別したい
  • メールサーバーを立てる際に、送信元ホスト名をドメイン名に合わせる必要がある
  • Kubernetes や Ansible の管理対象ノードとして名前ベースで識別したい

Ubuntu ではホスト名に「Static hostname(永続)」「Transient hostname(一時的)」「Pretty hostname(表示用の日本語等可能な名前)」の3種類があります。通常は Static hostname だけを変更すれば問題ありません。

手順1:現在のホスト名を確認する

まず現在のホスト名を確認しましょう。hostname コマンドか hostnamectl コマンドで確認できます。




ubuntu@server: ~
$ hostname
old-server
$ cat /etc/hostname
old-server
$ hostnamectl
Static hostname: old-server
Icon name: computer-vm
Chassis: vm
Operating System: Ubuntu 24.04.4 LTS
Kernel: Linux 6.8.0-51-generic
Architecture: x86-64

hostnamectl はホスト名だけでなく、OSバージョン・カーネルバージョン・アーキテクチャなどもまとめて確認できる便利なコマンドです。Ubuntu 24.04 では systemd 255 が搭載されており、このコマンドがデフォルトで使えます。

Ubuntu 24.04 ホスト名確認・変更の基本操作(実測)
Ubuntu 24.04 ホスト名確認・変更の基本操作(実測)

上図は Docker公式イメージ ubuntu:24.04 で実際に cat /etc/hostnameecho "myserver" > /etc/hostname を実行した結果です。/etc/hostname への書き込みが成功し、ファイルの中身が myserver に変わったことを確認しています。

手順2:hostnamectl でホスト名を変更する

hostnamectl set-hostname コマンドを使います。sudo が必要です。




ubuntu@server: ~
$ sudo hostnamectl set-hostname myserver
# コマンドが正常終了すれば何も表示されない(成功)
$ hostname
myserver
$ cat /etc/hostname
myserver

コマンドを実行すると、以下が同時に行われます。

  • /etc/hostname ファイルの書き換え
  • カーネルのホスト名(transient hostname)の即時更新
  • systemd-hostnamed サービスへの通知

再起動不要で即座に反映されます。新しいシェルセッションを開くと、プロンプトが user@myserver:~$ に変わっているはずです。

hostnamectl でホスト名を変更する手順(Ubuntu 24.04)
hostnamectl でホスト名を変更する手順(Ubuntu 24.04)

上図は Ubuntu 24.04 LTS VPS での hostnamectl コマンドの実行フロー(再現UI)です。変更前は old-server、変更後は myserver として Static hostname が更新されています。systemd 255 環境での標準的な出力形式です。

ホスト名の命名規則

ホスト名に使える文字は 英小文字・数字・ハイフン のみです(RFC 952 / RFC 1123)。先頭と末尾はハイフン不可。日本語・スペース・アンダースコアは使えません。例:web-server-01(OK)、my server(NG)

手順3:/etc/hosts も合わせて更新する

ホスト名を変更したら、/etc/hosts127.0.1.1 行も更新してください。ここを更新しないとローカル名前解決が崩れ、sudo 実行時に「unable to resolve host」警告が出ることがあります。




ubuntu@server: ~
# 変更前の /etc/hosts を確認
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 old-server
::1 localhost ip6-localhost ip6-loopback
# sed で 127.0.1.1 行を新しいホスト名に置換
$ sudo sed -i ‘s/127\.0\.1\.1.*/127.0.1.1\tmyserver/’ /etc/hosts
# 更新後を確認
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 myserver
::1 localhost ip6-localhost ip6-loopback

Docker コンテナで実際に /etc/hostname の書き換えと /etc/hosts の更新(grep -v + printf 経由)を実行し、変更後のファイル内容を確認しました。

/etc/hosts の更新手順(Ubuntu 24.04 実測)
/etc/hosts の更新手順(Ubuntu 24.04 実測)

127.0.1.1 行が存在しない場合

Ubuntu のクリーンインストール直後や、一部のクラウドVPSイメージでは 127.0.1.1 行が最初から無い場合があります。その場合は sudo nano /etc/hosts で以下の1行を 127.0.0.1 localhost の直下に追加してください。

127.0.1.1 myserver

Ubuntu 22.04 と 24.04 の systemd バージョン比較

実際に Docker公式イメージ(ubuntu:22.04ubuntu:24.04)で dpkg -l | grep libsystemd0 を実行してバージョンを確認しました。

Ubuntu 22.04 vs 24.04 hostnamectl 対応バージョン比較(実測)
Ubuntu 22.04 vs 24.04 hostnamectl 対応バージョン比較(実測)

実測の結果:

  • Ubuntu 22.04.5 LTS(Jammy Jellyfish):libsystemd0 249.11-0ubuntu3.20 → systemd 249
  • Ubuntu 24.04.4 LTS(Noble Numbat):libsystemd0 255.4-1ubuntu8.15 → systemd 255

どちらのバージョンでも hostnamectl コマンドは利用可能で、手順は同じです。Ubuntu 24.04 は Pretty hostname の絵文字サポートが改善されています(通常は使わない機能です)。

変更後の確認手順

ホスト名を変更したら、以下の3つを確認しましょう。




ubuntu@myserver: ~
# ① 現在の稼働ホスト名を確認
$ hostname
myserver
# ② /etc/hostname ファイルを確認
$ cat /etc/hostname
myserver
# ③ hostnamectl で詳細確認
$ hostnamectl
Static hostname: myserver
Operating System: Ubuntu 24.04.4 LTS
Kernel: Linux 6.8.0-51-generic
# ④ 新しいシェルで sudo が通るか確認
$ sudo echo “hostname OK”
hostname OK

新しいシェルセッションを開くと、プロンプトが user@myserver:~$ に変わっているはずです。

SSH 接続後のホスト鍵の確認

VPSにSSHで接続している場合、ホスト名を変えても SSH ホスト鍵(/etc/ssh/ssh_host_*)は変わりません。ただし、接続元クライアントの ~/.ssh/known_hosts には旧ホスト名のエントリが残るため、次のエラーが出ることがあります。




user@local: ~
$ ssh user@myserver
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
# → 旧ホスト名のエントリを削除して接続し直す
$ ssh-keygen -R old-server
# Host old-server found: line 42
/home/user/.ssh/known_hosts updated.

Docker公式イメージ ubuntu:24.04 に openssh-server をインストールして SSH ホスト鍵を実際に生成・確認しました(ED25519 fingerprint: SHA256:flCUtaI2N3gMGpZsTnXnN9cEtfGz+1dxSo+XyHg2Zgo)。ホスト名を変更しても既存の鍵の fingerprint は変わらないことを確認しています。

ホスト名変更後の SSH 再接続確認(実測)
ホスト名変更後の SSH 再接続確認(実測)

よくあるエラーと解決策

① sudo: unable to resolve host myserver

/etc/hosts の更新を忘れた場合に起きます。sudo は実行時にホスト名を自己参照するため、127.0.1.1 行に新しいホスト名が無いと警告が出ます(コマンド自体は動く)。




ubuntu@myserver: ~
sudo: unable to resolve host myserver: Name or service not known
# /etc/hosts を確認・修正する
$ cat /etc/hosts | grep 127.0.1.1
127.0.1.1 old-server ← まだ古い名前のまま!
$ sudo sed -i ‘s/127\.0\.1\.1.*/127.0.1.1\tmyserver/’ /etc/hosts

② hostnamectl: Failed to set hostname

systemd が起動していない環境(Docker コンテナ内など)で起きます。コンテナ内では hostnamectl は動作しません。VPS・実機・WSL 2(systemd 有効)では問題ありません。




ubuntu@linuxlab: ~
Failed to set hostname: Failed to connect to bus: No such file or directory
# systemd が起動していない(Docker コンテナ内)
# VPS や実機では発生しない
# 代替手段: /etc/hostname を直接書き換えてリブート
$ echo “myserver” | sudo tee /etc/hostname
myserver
$ sudo reboot

③ ホスト名の変更が再起動後に元に戻る

hostname コマンドで変更した場合(sudo hostname myserver)は一時変更のみで、再起動すると /etc/hostname の値に戻ります。hostnamectl set-hostname を使うと永続的に保存されます。

コマンド 即時反映 永続的(再起動後も保持) 推奨
sudo hostnamectl set-hostname あり あり(/etc/hostname に保存) ✓ おすすめ
sudo hostname 新ホスト名 あり なし(再起動で戻る) 一時変更のみ
sudo nano /etc/hostname + 再起動 なし(要再起動) あり 古い方法

まとめ

Ubuntu でホスト名を変更する最も確実な方法は hostnamectl set-hostname コマンドです。

  • コマンドは sudo hostnamectl set-hostname 新しいホスト名
  • 再起動不要で即時反映される
  • /etc/hostname への書き込みも自動で行われる
  • 変更後は /etc/hosts127.0.1.1 行も sed で更新する
  • Ubuntu 22.04(systemd 249)と 24.04(systemd 255)どちらでも同じ手順

VPSでUbuntuサーバーを運用するなら、ホスト名の設定は最初にやっておくべき基本作業の一つです。次のステップとして、SSHの鍵認証設定やファイアウォール(UFW)の設定も合わせて行うと、より安全なサーバー運用ができます。

本格的なVPS運用を始めたい方は、こちらの比較記事も参考にしてください。

コメント

タイトルとURLをコピーしました