我在 EC2 上运行了几个标准的 Fedora 实例。我觉得亚马逊分配的实例的公共主机名太奇怪了,很难记住。我想把它们改成简短的(比如红色/蓝色/绿色/等)。
这样做有什么缺点吗?以及如何设置它以使其在重新启动后仍然存在?
谢谢。
我在 EC2 上运行了几个标准的 Fedora 实例。我觉得亚马逊分配的实例的公共主机名太奇怪了,很难记住。我想把它们改成简短的(比如红色/蓝色/绿色/等)。
这样做有什么缺点吗?以及如何设置它以使其在重新启动后仍然存在?
谢谢。
在开始之前,请尝试运行hostname
并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 查找返回的内容。
FQDN
您无法使用此命令更改 FQDN(由 hostname --fqdn 返回)或 DNS 域名(由 dnsdomainname 返回)。系统的 FQDN 是 resolver(3) 为主机名返回的名称。
从技术上讲:FQDN 是 getaddrinfo(3) 为 gethostname(2) 返回的主机名返回的名称。DNS 域名是第一个点之后的部分。
因此,它取决于配置(通常在 /etc/host.conf 中)如何更改它。通常(如果 hosts 文件在 DNS 或 NIS 之前解析)您可以在 /etc/hosts 中更改它。
我认为有可能设置系统/欺骗系统以返回 FQDN,就像ip-123-123-123-123.ec2.internal
即使主机名是webserver
,但在这一点上,它开始看起来比它的价值更麻烦,而且对我来说有一个更好的bash 提示可能会导致很多软件和配置问题,所以我决定放弃。
我还了解到,很多亚马逊 ec2 实例都使用一种叫做cloud-init 的东西:
cloud-init 是处理云实例早期初始化的 Ubuntu 软件包。它安装在 Ubuntu 云映像以及 EC2 上可用的官方 Ubuntu 映像中。
它配置的一些东西是:
- 设置默认语言环境
- 设置主机名
- 生成 ssh 私钥
- 将 ssh 密钥添加到用户的 .ssh/authorized_keys 以便他们可以登录
- 设置临时挂载点
cloud-init 的行为可以通过用户数据进行配置。用户数据可以在实例启动时由用户提供。这是通过 ec2-run-instances 的 --user-data 或 --user-data-file 参数完成的
我还发现这个讨论了如何使用 cloud-init 配置主机名:
在 EBS 实例上,关闭和稍后启动会以不同的 IP 地址结束。
如果用户没有修改 /etc/hostname 的原始值(由元数据的“本地主机名”播种),则 cloud-init 将再次设置主机名并更新 /etc/hostname。
如果用户修改了 /etc/hostname,它将保持用户管理。
此外,如果 /etc/cloud/cloud.cfg 包含设置为 True 值的“preserve_hostname”值,则 /etc/hostname 将永远不会被触及。
有趣的是,如果您不更改主机名,cloud-init 包将为您保持最新状态。
如果其他人有解决方法或可以解决提到的一些问题并帮助确保不会因为更改主机名而在 ec2 实例上中断,我会很高兴听到它。
另一种方法是简单地编辑~/.bashrc
并PS1
添加机器的昵称。
编辑:也许更正确,机器范围,例如在 AWS Linux AMI 上(一个例子)(将其粘贴到控制台或添加到您的任意安装 .sh):
cat << EOF | sudo tee /etc/profile.d/ps1.sh
if [ "$PS1" ]; then
PS1="[\u@myinst1:\l \t \! \W]\\$ "
fi
EOF
/etc/sysconfig/network
以 root 身份编辑。
代替
HOSTNAME=localhost.localdomain
和
HOSTNAME=hostname.DOMAIN_NAME
然后,重新启动或运行/etc/init.d/network restart
服务器然后应将其名称报告为 FQDN。
从这个网站:
更改正在运行的系统上的主机名
在任何 Linux 系统上,您都可以使用命令更改其主机名
hostname
(惊讶吗?)... 以下是命令行主机名的一些快速用法:$> hostname
没有任何参数,它将输出系统的当前主机名。
$> hostname --fqd
它将输出系统的完全限定域名(或 FQDN)。
$> hostname NEW_NAME
将系统的主机名设置为
NEW_NAME
.
您还可以编辑/etc/hostname
(至少在 Ubuntu 上)。
为了确保它在 AWS 中重新启动后仍然存在,请添加命令/etc/rc.local
以便它在机器启动时运行。
还有一种方法可以通过 USER_DATA 动态设置主机名:
USER_DATA=`/usr/bin/curl -s http://169.254.169.254/latest/user-data` HOSTNAME=`echo $USER_DATA` IPV4=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/public-ipv4` hostname $HOSTNAME echo $HOSTNAME > /etc/hostname
将系统主机名更改为公共 DNS 名称
在您喜欢的文本编辑器中打开/etc/sysconfig/network
配置文件并更改 HOSTNAME 条目以反映完全限定的域名(例如 webserver.mydomain.com)。
HOSTNAME=webserver.mydomain.com
重新启动实例以获取新主机名。
[ec2-user ~]$ sudo reboot
登录到您的实例并验证主机名是否已更新。您的提示应该显示新的主机名(直到第一个“.”),并且 hostname 命令应该显示完全限定的域名。
[ec2-user@webserver ~]$ hostname
webserver.mydomain.com
在您喜欢的文本编辑器中打开/etc/sysconfig/network
配置文件并更改 HOSTNAME 条目以反映所需的系统主机名(例如 webserver)。
HOSTNAME=webserver.localdomain
在您喜欢的文本编辑器中打开该/etc/hosts
文件并添加一个以 127.0.1.1(在 DHCP 系统上)或 eth0 的地址(在静态 IP 系统上)开头的条目以匹配下面的示例,替换为您自己的主机名。(127.0.0.1 应保留为 localhost 行。)
127.0.0.1 localhost localhost.localdomain
127.0.1.1 webserver.example.com webserver
重新启动实例以获取新主机名。
[ec2-user ~]$ sudo reboot
登录到您的实例并验证主机名是否已更新。您的提示应该显示新的主机名(直到第一个“.”),并且 hostname 命令应该显示完全限定的域名。
[ec2-user@webserver ~]$ hostname
webserver.localdomain
注意:您也可以在不影响主机名的情况下更改 shell 提示。请参阅此 AWS 文档。
当然,如果您有自己的域(设置 CNAME 以指向 Amazon 主机名),您可以这样做。否则,您几乎会被他们提供给您的IP(或弹性IP,如果您设置其中之一)所困扰。
/etc/rc.local 解决方案适用于我的基本主机名,但没有给我一个 FQDN。
在我的 Linux AMI 中(其他实例的快照).. 上述公式均无效。然后,我只是更改了文件中的 HOSTNAME 字段:/etc/init.d/modifyhostname 并进行了正常重启。
您需要执行多项操作来设置主机名:
hostname newname
- 设置主机名,但不稳定我将这些放在一个脚本中并作为要点上传: https ://gist.github.com/mnebuerquo/5443532036af8b48995547e2817dba85
sudo hostname *yourdesiredhostnamehere*
sudo /etc/init.d/networking restart
然后更改主机名。在我的服务器上,所有其他服务(如 apache 和 postfix)都可以正常工作。服务器是 Ubuntu 12.04 LTS