我们可以为EC2实例设置易于记忆的主机名吗?
我在EC2上运行了两个标准的Fedora实例。 我觉得亚马逊分配的实例的公有主机名太奇怪了,难以记住。 我想把它们改成简短的东西(比如红/蓝/绿/等)。
这样做有什么缺点吗? 我该如何设置,使其在重新启动后仍然存在?
谢谢。
在开始之前,请尝试运行hostname
和hostname --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/network
configuration文件,并更改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/network
configuration文件,并更改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字段,并正常重启。