51

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

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

谢谢。

4

10 回答 10

89

在开始之前,请尝试运行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 查找返回的内容。

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 实例上中断,我会很高兴听到它。

于 2012-10-15T16:34:50.600 回答
13

另一种方法是简单地编辑~/.bashrcPS1添加机器的昵称。

编辑:也许更正确,机器范围,例如在 AWS Linux AMI 上(一个例子)(将其粘贴到控制台或添加到您的任意安装 .sh):

cat << EOF | sudo tee /etc/profile.d/ps1.sh
if [ "$PS1" ]; then
  PS1="[\u@myinst1:\l \t \! \W]\\$ "
fi
EOF
于 2012-11-20T20:06:09.983 回答
12

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

代替

HOSTNAME=localhost.localdomain

HOSTNAME=hostname.DOMAIN_NAME

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

于 2011-02-28T08:49:53.847 回答
7

这个网站

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

在任何 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
于 2012-05-22T08:56:54.067 回答
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
    

在没有公共 DNS 名称的情况下更改系统主机名

  1. 在您喜欢的文本编辑器中打开/etc/sysconfig/network配置文件并更改 HOSTNAME 条目以反映所需的系统主机名(例如 webserver)。

    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
    

注意:您也可以在不影响主机名的情况下更改 shell 提示。请参阅此 AWS 文档

于 2014-04-01T02:59:11.017 回答
0

当然,如果您有自己的域(设置 CNAME 以指向 Amazon 主机名),您可以这样做。否则,您几乎会被他们提供给您的IP(或弹性IP,如果您设置其中之一)所困扰。

于 2009-03-02T18:41:15.160 回答
0

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

于 2010-11-12T05:42:17.793 回答
0

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

于 2015-01-07T13:09:26.107 回答
0

您需要执行多项操作来设置主机名:

  1. hostname newname- 设置主机名,但不稳定
  2. 编辑 /etc/hostname - 设置下次重启的主机名
  3. 编辑 /etc/hosts - 防止 sudo 抱怨

我将这些放在一个脚本中并作为要点上传: https ://gist.github.com/mnebuerquo/5443532036af8b48995547e2817dba85

于 2018-03-17T22:26:03.793 回答
-1
sudo hostname *yourdesiredhostnamehere*

sudo /etc/init.d/networking restart

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

于 2013-03-29T17:26:46.400 回答