我们可以为EC2实例设置易于记忆的主机名吗?

我在EC2上运行了两个标准的Fedora实例。 我觉得亚马逊分配的实例的公有主机名太奇怪了,难以记住。 我想把它们改成简短的东西(比如红/蓝/绿/等)。

这样做有什么缺点吗? 我该如何设置,使其在重新启动后仍然存在?

谢谢。

在开始之前,请尝试运行hostnamehostname --fqdn并记下响应的内容。

您可以编辑/etc/hostname并设置一个主机名,在重新启动之后它将继续存在。 您可以使用hostname -F /etc/hostname将该值读入主机名中,强制主机名“重新加载”。 在注销和login后,bash提示符将会改变。

警告/注意
是的,把bash提示符中的主机名设置为比ip-123-123-123-123更有用的东西是很好的,但是我决定离开我(至less现在),因为它好像很多东西真正依靠以标准方式设置ec2实例的主机名。 编辑/etc/hostname并将/etc/hostname更改为webserver ,很多服务似乎失败,因为主机名不能parsing,并且apache不会启动。 接下来我编辑/etc/hosts并join

 127.0.0.1 webserver 

作为第二行。 Apache然后会启动,但是抱怨说找不到FQDN。 我确认运行hostname --fqdn不再有效。

接下来我咨询了man hostname并了解到,虽然你可以设置hostname但是看起来FQDN是通过DNS查找返回的。

FQDN

您不能使用此命令更改FQDN(由主机名–fqdn返回)或DNS域名(由dnsdomainname返回)。 系统的FQDN是parsing器(3)返回的主机名的名称。

从技术上讲:FQDN是getaddrinfo(3)返回gethostname(2)返回的主机名的名称。 DNS域名是第一个点之后的部分。

因此它取决于configuration(通常在/etc/host.conf)如何改变它。 通常(如果在DNS或NIS之前parsing主机文件),可以在/ etc / hosts中更改它。

我认为可能设置系统/愚弄系统返回FQDN,就像ip-123-123-123-123.ec2.internal即使主机名是webserver但在这一点上,似乎开始看起来更像麻烦比它值得,而且对我来说,有一个更好的bash提示可能会导致很多软件和configuration问题,所以我决定放弃。

我还了解到,很多amazon ec2实例使用了一些名为cloud-init的东西:

cloud-init是处理云实例的早期初始化的Ubuntu包。 它安装在Ubuntu Cloud Images中,也安装在EC2上的官方Ubuntu镜像中。

它configuration的一些东西是:

  • 设置默认的语言环境
  • 设置主机名
  • 生成ssh私钥
  • 添加ssh密钥到用户的.ssh / authorized_keys,以便他们可以login
  • 设置临时挂载点

cloud-init的行为可以通过用户数据进行configuration。 用户数据可以由用户在实例启动时提供。 这是通过ec2-run-instances的–user-data或者–user-data-file参数完成的

我也发现这个谈到如何使用cloud-initconfiguration主机名:

在EBS实例上,closures和稍后启动将以不同的IP地址结束。

在用户没有从其原始值修改/ etc / hostname(由元数据的“local-hostname”生成)的情况下,cloud-init将再次设置主机名并更新/ etc / hostname。

在用户修改/ etc / hostname的情况下,它将保持用户pipe理。

此外,如果/etc/cloud/cloud.cfg包含“preserve_hostname”值设置为True值,则不会触及/ etc / hostname。

有意思的是,如果你不改变主机名,那么cloud-init软件包会使它保持最新状态。

如果别人有解决方法或可以解决一些问题,并帮助确保没有什么会因为更改主机名ec2实例中断,我会很高兴听到它。

以root身份编辑/etc/sysconfig/network

更换

 HOSTNAME=localhost.localdomain 

 HOSTNAME=hostname.DOMAIN_NAME 

然后,重新启动或运行/etc/init.d/network restart然后,服务器应该将其名称报告为FQDN。

另一种方法是简单地编辑~/.bashrc并在机器的昵称之前加上PS1

从这个网站 :

更改正在运行的系统上的主机名

在任何Linux系统上,您都可以使用命令“hostname”更改主机名(惊讶吗?)…以下是命令行主机名的一些快速用法:

$>主机名

没有任何参数,它将输出系统的当前主机名。

$>主机名–fqd

它将输出系统的完全限定的域名(或FQDN)。

$>主机名NEW_NAME

将系统的主机名设置为NEW_NAME。

你也可以编辑/ etc / hostname(至less在Ubuntu上)。

为了确保在AWS中重新启动后,请在/etc/rc.local中添加该命令,以便在机器启动时运行。

还有一种通过USER_DATAdynamic设置主机名的方法:

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

echo $ HOSTNAME> / etc / hostname

将系统主机名更改为公用DNS名称

如果您已经注册了公共DNS名称,请按照此步骤操作。

1)打开您喜欢的文本编辑器中的/etc/sysconfig/networkconfiguration文件,并更改HOSTNAME条目以反映完全限定的域名(例如webserver.mydomain.com)。

 HOSTNAME=webserver.mydomain.com 

2)重新启动实例来获取新的主机名。

 [ec2-user ~]$ sudo reboot 

3)login到您的实例,并validation主机名已被更新。 您的提示应该显示新的主机名(直到第一个“。”),hostname命令应该显示完全限定的域名。

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

要更改系统主机名而不使用公共DNS名称

1)打开您喜欢的文本编辑器中的/etc/sysconfig/networkconfiguration文件,并更改HOSTNAME条目以反映所需的系统主机名(例如web服务器)。

 HOSTNAME=webserver.localdomain 

2)在你最喜欢的文本编辑器中打开/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 

3)重新启动实例来获取新的主机名。

 [ec2-user ~]$ sudo reboot 

4)login到您的实例并validation主机名已被更新。 您的提示应该显示新的主机名(直到第一个“。”),hostname命令应该显示完全限定的域名。

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

注意:您也可以更改shell提示符而不影响主机名。 参考这个AWS文档 :

当然,如果您拥有自己的域名(设置CNAME指向Amazon主机名),则可以这样做。 否则,你几乎被他们给你的那个(或者一个Elastic IP,如果你设置了其中一个)。

如果你不想惹你的DNS提供者,你可以使用你的实例的别名。 我真的很惊讶,亚马逊没有提供给EC2实例的别名,当他们出来AWSpipe理控制台 ,但同时,如果你想要别名function,你可以使用免费的RightScale服务比记住这些Amazon实例ID更简单。

/etc/rc.local解决scheme为我工作的基本主机名,但不给我一个FQDN。

 sudo hostname *yourdesiredhostnamehere* sudo /etc/init.d/networking restart 

然后主机名被改变。 在我的服务器上所有其他的服务,如Apache和Postfix的作品。 服务器是Ubuntu 12.04 LTS

在我的Linux AMI(其他实例的快照)中,上述公式都没有工作。 然后,我只是改变了文件:/etc/init.d/modifyhostname中的HOSTNAME字段,并正常重启。