我在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
,但似乎通过DNS查找返回的是FQDN
。
FQDN
你不能使用这个命令更改FQDN(由
hostname --fqdn
返回)或DNS域名(由dnsdomainname
返回)。系统的FQDN是解析器(3)为主机名返回的名称。技术上:FQDN是
gethostname(2)
返回的主机名的getaddrinfo(3)
返回的名称。DNS域名是第一个点之后的部分。因此,它取决于配置(通常在/etc/host.conf中),您如何更改它。通常情况下(如果在DNS或NIS之前解析主机文件),您可以在/etc/hosts中更改它。
我认为可能有可能设置系统/欺骗系统返回FQDN,例如ip-123-123-123-123.ec2.internal
,即使主机名为webserver
,但在这一点上,这似乎更麻烦,不值得这样做,而且为了让我的bash提示符更好看,可能会在未来导致许多软件和配置问题,所以我放弃了。
我还了解到很多Amazon EC2实例使用名为cloud-init的东西:
cloud-init是处理云实例的早期初始化的Ubuntu包。它安装在Ubuntu Cloud映像中,也安装在EC2上提供的官方Ubuntu映像中。
它配置的一些内容包括:
- 设置默认语言环境
- 设置主机名
- 生成SSH私钥
- 将SSH密钥添加到用户的.ssh/authorized_keys中,以便他们登录
- 设置临时挂载点
可以通过用户数据配置cloud-init的行为。用户数据可以在实例启动时由用户提供。这是通过ec2-run-instances的--user-data或--user-data-file参数完成的。
我还发现了这个,它讨论了如何使用cloud-init配置主机名:
在EBS实例中,关闭和稍后启动将导致不同的IP地址。
在用户未将/etc/hostname从其原始值(由元数据的'local-hostname'生成)修改的情况下,cloud-init将再次设置主机名并更新/etc/hostname。
如果用户已修改了/etc/hostname,则它将保持由用户管理。
此外,如果/etc/cloud/cloud.cfg包含设置为真值的“preserve_hostname”值,则永远不会触摸/etc/hostname。
有趣的是,如果您不更改主机名,cloud-init软件包将为您更新它。
如果其他人有解决方法或可以解决提到的一些问题,并帮助确定更改主机名不会破坏EC2实例上的任何内容,我会很高兴听到。
hostname --fqdn
正常工作:您只需要一个解析的域名,无论是因为您已经注册了一个指向该主机的域名,还是像 @saltwaterc 建议的那样“欺骗”它。两种方法都可以。 - bryant/etc/hosts
文件时要小心。应该将127.0.0.1保留为本地主机行。添加一行新的虚假地址(对于DHCP系统),例如127.0.1.1 webserver.example.com webserver
。(Ping SaltwaterC和cmd)。) - Alastair Irvineip-172-31-3-124.ec2.internal
,hostname --fqdn
命令也会失败。通过 /etc/sysconfig/network
更改为真实名称并不会更糟。 - David~/.bashrc
文件,并在PS1
前加上机器的昵称。cat << EOF | sudo tee /etc/profile.d/ps1.sh
if [ "$PS1" ]; then
PS1="[\u@myinst1:\l \t \! \W]\\$ "
fi
EOF
请以root身份编辑/etc/sysconfig/network
。
替换
HOSTNAME=localhost.localdomain
使用
HOSTNAME=hostname.DOMAIN_NAME
然后,重新启动或运行/etc/init.d/network restart
。接下来,服务器应将其名称报告为FQDN。
From this site:
你还可以编辑Change the hostname on a running system
On any Linux system you can change its hostname with the command
hostname
(surprised?)… Here are some quick usages of the command line hostname:$> hostname
without any parameter it will output the current hostname of the system.
$> hostname --fqd
it will output the fully qualified domain name (or FQDN) of the system.
$> hostname NEW_NAME
will set the hostname of the system to
NEW_NAME
.
/etc/hostname
文件(至少在Ubuntu上)。/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
/etc/rc.local的解决方案对于基本主机名对我有用,但不能给我一个完全限定域名。
设置主机名需要执行多个步骤:
hostname newname
- 设置主机名,但是易失性的我将它们组合成一个脚本,并将其上传为 gist: https://gist.github.com/mnebuerquo/5443532036af8b48995547e2817dba85
sudo hostname *yourdesiredhostnamehere*
sudo /etc/init.d/networking restart
然后主机名被更改。在我的服务器上,所有其他服务如apache和postfix都可以正常工作。服务器是Ubuntu 12.04 LTS。