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

时间:2009-03-02 18:02:02

标签: amazon-ec2 hostname

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

这样做有什么缺点吗?我如何设置它以便在重新启动后仍然存在?

感谢。

11 个答案:

答案 0 :(得分:83)

在开始之前,请尝试运行hostnamehostname --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是geadostname(2)返回的主机名的名称getaddrinfo(3)。 DNS域名是第一个点之后的部分。

     

因此,它取决于配置(通常在/etc/host.conf中)如何更改它。通常(如果在DNS或NIS之前解析hosts文件),您可以在/ etc / hosts中更改它。

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

我还了解到很多亚马逊ec2实例使用的是cloud-init

  

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

     

它配置的一些东西是:

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

cloud-init的行为可以通过用户数据进行配置。用户可以在实例启动时给出用户数据。这是通过ec2-run-instances

的--user-data或--user-data-file参数完成的

I also found this讨论了如何使用cloud-init配置主机名:

  

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

     

如果用户未从原始值修改/ etc / hostname(由元数据的'local-hostname'播种),则cloud-init将再次设置主机名并更新/ etc / hostname。

     

如果用户修改了/ etc / hostname,它将保持用户管理。

     

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

有趣的是,如果您不更改主机名,cloud-init软件包将为您保持最新状态。

如果其他人有解决方法或可以解决上面提到的一些问题并帮助确保ec2实例上没有任何内容会因为更改主机名而中断,我很乐意听到它。

答案 1 :(得分:13)

另一种方法是简单地编辑~/.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

答案 2 :(得分:12)

以root身份修改/etc/sysconfig/network

替换

HOSTNAME=localhost.localdomain

HOSTNAME=hostname.DOMAIN_NAME

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

答案 3 :(得分:6)

来自this site

  

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

     

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

$> hostname
     

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

$> hostname --fqd
     

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

$> hostname NEW_NAME
     

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

您还可以编辑/etc/hostname(至少在Ubuntu上)。

要确保在AWS重新启动后它保持不变,请在/etc/rc.local中添加命令,以便在计算机启动时运行。

还有一种方法set the hostname dynamically via 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

答案 4 :(得分:1)

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

如果您已注册公共DNS名称

,请执行此过程
  1. 在您喜欢的文本编辑器中打开/etc/sysconfig/network配置文件,并更改HOSTNAME条目以反映完全限定的域名(例如webserver.mydomain.com)。

    HOSTNAME=webserver.mydomain.com
    
  2. 重新启动实例以获取新主机名。

    [ec2-user ~]$ sudo reboot
    
  3. 登录您的实例并验证主机名是否已更新。您的提示应显示新的主机名(直到第一个“。”),hostname命令应显示完全限定的域名。

    [ec2-user@webserver ~]$ hostname
    webserver.mydomain.com
    
  4. 更改没有公用DNS名称的系统主机名

    1. 在您喜欢的文本编辑器中打开/etc/sysconfig/network配置文件,并更改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. 登录您的实例并验证主机名是否已更新。您的提示应显示新的主机名(直到第一个“。”),hostname命令应显示完全限定的域名。

      [ec2-user@webserver ~]$ hostname
      webserver.localdomain
      
    5. 注意:您还可以在不影响主机名的情况下更改shell提示符。请参阅this AWS documentation

答案 5 :(得分:0)

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

答案 6 :(得分:0)

/etc/rc.local解决方案适用于我的基本主机名,但没有给我一个FQDN。

答案 7 :(得分:0)

在我的Linux AMI(其他实例的快照)中。上述公式均无效。然后,我只需更改文件中的HOSTNAME字段:/etc/init.d/modifyhostname并正常重启。

答案 8 :(得分:0)

您需要做多件事来设置主机名:

  1. hostname newname - 设置主机名,但不稳定
  2. 编辑/ etc / hostname - 设置下次重启的主机名
  3. 编辑/ etc / hosts - 让sudo不要抱怨
  4. 我把这些放在一个脚本中并上传为一个要点: https://gist.github.com/mnebuerquo/5443532036af8b48995547e2817dba85

答案 9 :(得分:-1)

如果您不想弄乱DNS提供商,可以为实例使用别名。我很惊讶亚马逊在提出AWS Management Console时没有提供为EC2实例提供别名的方法,但与此同时,如果你使用免费的RightScale服务,你可以使用想要别名功能 - 比记住这些Amazon实例ID容易得多。

答案 10 :(得分:-1)

sudo hostname *yourdesiredhostnamehere*

sudo /etc/init.d/networking restart

然后更改主机名。在我的服务器上所有其他服务,如apache和postfix工作。服务器是Ubuntu 12.04 LTS