在开始之前,请尝试运行hostname
and hostname --fqdn
并记下回应是什么。
您可以编辑/etc/hostname
并设置一个主机名,该主机名在重新启动后将保留。您可以使用以下命令强制“重新加载”主机名hostname -F /etc/hostname
将该值读入主机名。注销并登录后,bash 提示符将会更改。
警告/注意:
是的,最好将 bash 提示符中的主机名设置为比ip-123-123-123-123
但我决定放弃我的(至少现在),因为似乎很多事情确实依赖于以标准方式设置 ec2 实例上的主机名。编辑后/etc/hostname
并将主机名更改为webserver
很多服务似乎都失败了,因为主机名无法解析,并且 apache 无法启动。接下来我编辑了/etc/hosts
并添加到
127.0.0.1 webserver
作为第二行。 Apache 然后会启动,但抱怨它找不到 FQDN。我确认正在运行hostname --fqdn
不再工作了。
接下来我咨询了man hostname
并了解到虽然您可以设置hostname
看来FQDN
是通过 DNS 查找返回的内容。
THE FQDN
您无法使用此命令更改 FQDN(由 hostname --fqdn 返回)或 DNS 域名(由 dnsdomainname 返回)。系统的 FQDN 是解析器 (3) 返回的主机名名称。
从技术上讲:FQDN 是 getaddrinfo(3) 针对 gethostname(2) 返回的主机名返回的名称。 DNS 域名是第一个点之后的部分。
因此,这取决于如何更改它的配置(通常在 /etc/host.conf 中)。通常(如果主机文件在 DNS 或 NIS 之前解析)您可以在 /etc/hosts 中更改它。
我认为可能可以设置系统/欺骗系统返回 FQDN,例如ip-123-123-123-123.ec2.internal
即使主机名是webserver
但此时它开始看起来比它的价值更麻烦,而且对我来说,有一个更好的 bash 提示符可能会导致很多软件和配置问题,所以我决定放弃。
我还了解到很多亚马逊 ec2 实例都使用名为云初始化 https://help.ubuntu.com/community/CloudInit:
cloud-init 是处理云实例早期初始化的 Ubuntu 软件包。它安装在 Ubuntu 云映像中以及 EC2 上提供的官方 Ubuntu 映像中。
它配置的一些内容是:
- 设置默认区域设置
- 设置主机名
- 生成ssh私钥
- 将 ssh 密钥添加到用户的 .ssh/authorized_keys 以便他们可以登录
- 设置临时挂载点
cloud-init 的行为可以通过用户数据进行配置。用户数据可以由用户在实例启动时给出。这是通过 ec2-run-instances 的 --user-data 或 --user-data-file 参数完成的
我也发现了这个 https://code.launchpad.net/%7Eclint-fewbar/cloud-init/glusterfs-mount-example其中讨论了如何使用 cloud-init 配置主机名:
在 EBS 实例上,关闭并稍后启动将得到不同的 IP 地址。
如果用户没有修改 /etc/hostname 的原始值(由元数据的“local-hostname”播种),则 cloud-init 将再次设置主机名并更新 /etc/hostname。
如果用户修改了 /etc/hostname,它将保持用户管理。
此外,如果 /etc/cloud/cloud.cfg 包含设置为 True 值的“preserve_hostname”值,则 /etc/hostname 将永远不会被触及。
有趣的是,如果您不更改主机名,cloud-init 软件包将为您保持最新状态。
如果其他人有解决方法或者可以解决提到的一些问题,并帮助确保 ec2 实例不会因为更改主机名而出现任何问题,我会很高兴听到。