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 コマンドで確認できます。
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 が搭載されており、このコマンドがデフォルトで使えます。

上図は Docker公式イメージ ubuntu:24.04 で実際に cat /etc/hostname と echo "myserver" > /etc/hostname を実行した結果です。/etc/hostname への書き込みが成功し、ファイルの中身が myserver に変わったことを確認しています。
手順2:hostnamectl でホスト名を変更する
hostnamectl set-hostname コマンドを使います。sudo が必要です。
# コマンドが正常終了すれば何も表示されない(成功)
$ hostname
myserver
$ cat /etc/hostname
myserver
コマンドを実行すると、以下が同時に行われます。
/etc/hostnameファイルの書き換え- カーネルのホスト名(transient hostname)の即時更新
- systemd-hostnamed サービスへの通知
再起動不要で即座に反映されます。新しいシェルセッションを開くと、プロンプトが user@myserver:~$ に変わっているはずです。

上図は 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/hosts の 127.0.1.1 行も更新してください。ここを更新しないとローカル名前解決が崩れ、sudo 実行時に「unable to resolve host」警告が出ることがあります。
$ 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 経由)を実行し、変更後のファイル内容を確認しました。

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.04・ubuntu:24.04)で dpkg -l | grep libsystemd0 を実行してバージョンを確認しました。

実測の結果:
- 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つを確認しましょう。
$ 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 には旧ホスト名のエントリが残るため、次のエラーが出ることがあります。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 は変わらないことを確認しています。

よくあるエラーと解決策
① sudo: unable to resolve host myserver
/etc/hosts の更新を忘れた場合に起きます。sudo は実行時にホスト名を自己参照するため、127.0.1.1 行に新しいホスト名が無いと警告が出ます(コマンド自体は動く)。
# /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 有効)では問題ありません。
# 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/hostsの127.0.1.1行もsedで更新する - Ubuntu 22.04(systemd 249)と 24.04(systemd 255)どちらでも同じ手順
VPSでUbuntuサーバーを運用するなら、ホスト名の設定は最初にやっておくべき基本作業の一つです。次のステップとして、SSHの鍵認証設定やファイアウォール(UFW)の設定も合わせて行うと、より安全なサーバー運用ができます。
本格的なVPS運用を始めたい方は、こちらの比較記事も参考にしてください。


コメント