

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 變更 AL2 執行個體的主機名稱
<a name="set-hostname"></a>

當您在私有 VPC 中啟動執行個體時，Amazon EC2 會指派客體作業系統主機名稱。Amazon EC2 指派的主機名稱類型取決於您的子網路設定。如需 EC2 主機名稱的詳細資訊，請參閱《[Amazon EC2 使用者指南》中的 Amazon EC2 執行個體主機名稱類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html)。 *Amazon EC2 *

設定為搭配使用 IP 型命名與 IPv4 地址之 EC2 執行個體的典型 Amazon EC2 私有 DNS 名稱，看起來會如同這樣：`ip-12-34-56-78.us-west-2.compute.internal`，其中名稱由內部網域、服務 (在此案例中為 `compute`)、區域，以及私有 IPv4 地址形式所組成。當您登入執行個體時，shell 提示中會顯示此主機名稱的一部分 (例如，`ip-12-34-56-78`)。每一次當您停止並重新啟動 Amazon EC2 執行個體時 (除非您使用彈性 IP 地址)，公有 IPv4 地址便會變更，您的公有 DNS 名稱、系統主機名稱和 shell 提示也都會變更。

**重要**  
此資訊適用於 Amazon Linux。如需其他分發的詳細資訊，請參閱其特定文件。

## 變更系統主機名稱
<a name="set-hostname-system"></a>

若您已為您執行個體的 IP 地址註冊公有 DNS 名稱 (例如 `webserver.mydomain.com`)，您可以設定系統主機名稱，使您的執行個體將其自身識別為該網域的一部分。這也會變更 shell 提示，使其顯示此名稱的第一個部分，而不是由 提供的主機名稱 AWS （例如，`ip-12-34-56-78`)。若您沒有已註冊的公有 DNS 名稱，您仍然可以變更主機名稱，只是程序會有些不同。

為了讓您的主機名稱更新持續，必須確認 `preserve_hostname` 雲端初始化設定已設定為 `true`。您可以執行下列命令來編輯或新增此設定：

```
sudo vi /etc/cloud/cloud.cfg
```

如果未列出 `preserve_hostname` 設定，請將下列文字行新增至檔案結尾：

```
preserve_hostname: true
```

**將系統主機名稱變更為公有 DNS 名稱**

若您有已註冊的公有 DNS 名稱，請遵循此程序。

1. 
   + 對於 AL2：使用 **hostnamectl**命令來設定主機名稱，以反映完整網域名稱 （例如 **webserver.mydomain.com**)。

     ```
     [ec2-user ~]$ sudo hostnamectl set-hostname webserver.mydomain.com
     ```
   + 若為 Amazon Linux AMI：在您的執行個體上，在您喜愛的文字編輯器中開啟 `/etc/sysconfig/network` 組態檔案，然後變更 `HOSTNAME` 項目，使其反映完整的網域名稱 (例如 **webserver.mydomain.com**)。

     ```
     HOSTNAME=webserver.mydomain.com
     ```

1. 重新開機執行個體來套用新的主機名稱。

   ```
   [ec2-user ~]$ sudo reboot
   ```

   或者，您可以使用 Amazon EC2 主控台 (在 **Instances (執行個體)** 頁面上，選取執行個體，並選取 **Instance state (執行個體狀態)**、**Reboot instance (重新啟動執行個體)**)，以重新開機。

1. 登入您的執行個體，確認主機名稱已更新。您的提示現在應該會顯示新的主機名稱 (最多顯示到第一個 ".")，而 **hostname** 命令應該會顯示完整的網域名稱。

   ```
   [ec2-user@webserver ~]$ hostname
   webserver.mydomain.com
   ```

**不使用公有 DNS 名稱變更系統主機名稱**

1. 
   + 對於 AL2：使用 **hostnamectl**命令來設定主機名稱，以反映所需的系統主機名稱 （例如 **webserver**)。

     ```
     [ec2-user ~]$ sudo hostnamectl set-hostname webserver.localdomain
     ```
   + 如為 Amazon Linux AMI：在您的執行個體上，使用您偏好的文字編輯器開啟 `/etc/sysconfig/network` 組態檔案，然後變更 `HOSTNAME` 項目，使其反映所需系統主機名稱 (例如 **webserver**)。

     ```
     HOSTNAME=webserver.localdomain
     ```

1. 在您喜愛的文字編輯器中開啟 `/etc/hosts` 檔案，然後變更開頭為 **127.0.0.1** 的項目，使其反映以下的範例，並使用您自己的主機名稱取代。

   ```
   127.0.0.1 webserver.localdomain webserver localhost4 localhost4.localdomain4
   ```

1. 重新開機執行個體來套用新的主機名稱。

   ```
   [ec2-user ~]$ sudo reboot
   ```

   或者，您可以使用 Amazon EC2 主控台 (在 **Instances (執行個體)** 頁面上，選取執行個體，並選取 **Instance state (執行個體狀態)**、**Reboot instance (重新啟動執行個體)**)，以重新開機。

1. 登入您的執行個體，確認主機名稱已更新。您的提示現在應該會顯示新的主機名稱 (最多顯示到第一個 ".")，而 **hostname** 命令應該會顯示完整的網域名稱。

   ```
   [ec2-user@webserver ~]$ hostname
   webserver.localdomain
   ```

您也可以實作更多程式設計解決方案，例如指定使用者資料來設定執行個體。如果您的執行個體是 Auto Scaling 群組的一部分，您可以使用 lifecycle hook 來定義使用者資料。如需詳細資訊，請參閱《AWS CloudFormation 使用者指南》中的[啟動時在 Linux 執行個體上執行命令](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)和[執行個體啟動時的 lifecycle hook](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-lifecyclehook.html#aws-resource-autoscaling-lifecyclehook--examples--Lifecycle_hook_for_instance_launch)。

## 變更 Shell 提示而不影響主機名稱
<a name="set-hostname-shell"></a>

如果您不想修改執行個體的主機名稱，但想要顯示比 提供的私有名稱更有用的系統名稱 （例如 **webserver**) AWS （例如 `ip-12-34-56-78`)，您可以編輯 shell 提示組態檔案以顯示您的系統別名，而不是主機名稱。

**將 shell 提示變更為主機別名**

1. 在 `/etc/profile.d` 中建立一個檔案，並將稱為 `NICKNAME` 的環境變數設為您希望在 shell 提示中顯示的值。例如，若要將系統別名設為 **webserver**，請執行以下命令。

   ```
   [ec2-user ~]$ sudo sh -c 'echo "export NICKNAME=webserver" > /etc/profile.d/prompt.sh'
   ```

1. 在您慣用的文字編輯器中 (例如 `/etc/bashrc` 或 `/etc/bash.bashrc`) 開啟 **vim** (Red Hat) 或 **nano** (Debian/Ubuntu) 檔案。因為 **sudo** 和 `/etc/bashrc` 的擁有者是 `/etc/bash.bashrc`，所以您需要搭配編輯器命令使用 `root`。

1. 編輯檔案，將 shell 提示變數 (`PS1`) 變更為顯示您的別名，而非主機名稱。尋找以下在 `/etc/bashrc` 或 `/etc/bash.bashrc` 中設定 shell 提示的文字 (以下也會顯示上下幾行文字以供了解上下內容；請尋找開頭為 `[ "$PS1"` 的文字)：

   ```
     # Turn on checkwinsize
     shopt -s checkwinsize
     [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
     # You might want to have e.g. tty in prompt (e.g. more virtual machines)
     # and console windows
   ```

   將該行中的 `\h` (`hostname` 的符號) 變更為 `NICKNAME` 變數的值。

   ```
     # Turn on checkwinsize
     shopt -s checkwinsize
     [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@$NICKNAME \W]\\$ "
     # You might want to have e.g. tty in prompt (e.g. more virtual machines)
     # and console windows
   ```

1. (選用) 若要將 shell 視窗的標題設為新的別名，請完成以下步驟。

   1. 建立名為 `/etc/sysconfig/bash-prompt-xterm` 的檔案。

      ```
      [ec2-user ~]$ sudo touch /etc/sysconfig/bash-prompt-xterm
      ```

   1. 使用以下命令將檔案轉換成可執行檔。

      ```
      [ec2-user ~]$ sudo chmod +x /etc/sysconfig/bash-prompt-xterm
      ```

   1. 在您喜愛的文字編輯器 (例如 `/etc/sysconfig/bash-prompt-xterm` 或 **vim**) 中開啟 **nano** 檔案。您需要使用 **sudo** 搭配編輯器命令，因為 `/etc/sysconfig/bash-prompt-xterm` 的擁有者是 `root`。

   1. 為檔案新增下行。

      ```
      echo -ne "\033]0;${USER}@${NICKNAME}:${PWD/#$HOME/~}\007"
      ```

1. 登出然後重新登入，以取得新的別名值。

## 在其他 Linux 發行版本上變更主機名稱
<a name="set-hostname-other-linux"></a>

本頁面的程序僅適用於 Amazon Linux。如需其他 Linux 分佈的詳細資訊，請參閱其特定文件和以下文章：
+ [如何將靜態主機名稱指派給執行 RHEL 7 或 Centos 7 的私有 Amazon EC2 執行個體？](https://aws.amazon.com/premiumsupport/knowledge-center/linux-static-hostname-rhel7-centos7/)