Можем ли мы установить легко запоминаемые имена хостов для экземпляров EC2? - PullRequest
48 голосов
/ 02 марта 2009

Я использую пару стандартных экземпляров Fedora на EC2. Я считаю, что публичные имена хостов, назначенные Amazon, слишком странные и их трудно запомнить. Я хотел бы изменить их на что-то короткое (например, красный / синий / зеленый / и т. Д.).

Есть ли какой-то недостаток в этом? И как мне настроить его так, чтобы оно сохранялось после перезагрузки?

Спасибо.

Ответы [ 11 ]

84 голосов
/ 15 октября 2012

Прежде чем начать, попробуйте запустить 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, но пожаловался, что не может найти полное доменное имя. Я подтвердил, что hostname --fqdn больше не работает.

Далее я обратился к man hostname и узнал, что, хотя вы можете установить hostname, похоже, что FQDN - это то, что возвращается через поиск DNS.

полное доменное имя

С помощью этой команды нельзя изменить полное доменное имя (возвращаемое именем хоста --fqdn) или имя домена DNS (возвращаемое именем dnsdomainname). Полное доменное имя системы - это имя, которое resolver (3) возвращает для имени хоста.

Технически: полное доменное имя - это имя, которое getaddrinfo (3) возвращает для имени хоста, возвращаемого gethostname (2). DNS-имя домена является частью после первой точки.

Следовательно, от конфигурации зависит (как правило, в /etc/host.conf), как вы можете ее изменить. Обычно (если файл hosts анализируется до DNS или NIS), вы можете изменить его в /etc/hosts.

Я думаю, что было бы возможно настроить систему / заставить систему вернуть полное доменное имя, что-то вроде ip-123-123-123-123.ec2.internal, хотя имя хоста webserver, но в этот момент это стало казаться большим количеством проблем, чем оно того стоило и что для меня более приятное приглашение bash может вызвать много проблем с программным обеспечением и конфигурацией в будущем, и поэтому я решил отказаться.

Я также узнал, что многие экземпляры amazon ec2 используют что-то под названием cloud-init :

cloud-init - это пакет Ubuntu, который обрабатывает раннюю инициализацию экземпляра облака. Он устанавливается в облачных образах Ubuntu, а также в официальных образах Ubuntu, доступных на EC2.

Некоторые из его настроек:

  • установка языка по умолчанию
  • настройка имени хоста
  • генерация закрытых ключей ssh ​​
  • добавление ключей ssh ​​в пользовательские .ssh / авторизованные_ключи, чтобы они могли войти в систему
  • настройка эфемерных точек монтирования

поведение cloud-init можно настроить с помощью пользовательских данных. Пользовательские данные могут быть предоставлены пользователем во время запуска экземпляра. Это делается с помощью аргумента --user-data или --user-data-file для ec2-run-instances

Я также нашел это , которое говорит о том, как имя хоста настроено с помощью 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 ничего не сломается из-за изменения имени хоста, я был бы рад услышать его.

13 голосов
/ 21 ноября 2012

Другой способ - просто отредактировать ~/.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
12 голосов
/ 28 февраля 2011

Редактировать /etc/sysconfig/network как root.

Заменить

HOSTNAME=localhost.localdomain

с

HOSTNAME=hostname.DOMAIN_NAME

Затем перезагрузите компьютер или запустите /etc/init.d/network restart Затем сервер должен сообщить свое имя как полное доменное имя.

6 голосов
/ 22 мая 2012

С этого сайта :

Изменить имя хоста в работающей системе

В любой системе Linux вы можете изменить имя хоста с помощью команды hostname (удивлен?)… Вот несколько быстрых способов использования имени хоста командной строки:

$> hostname

без параметров выводит текущее имя хоста системы.

$> hostname --fqd

выводит полное доменное имя (или полное доменное имя) системы.

$> 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
1 голос
/ 01 апреля 2014

Чтобы изменить системное имя хоста на публичное 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, чтобы отразить желаемое имя хоста системы (например, веб-сервер).

    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
    

Примечание: Вы также можете изменить приглашение оболочки, не затрагивая имя хоста. См. эту документацию AWS .

0 голосов
/ 18 марта 2018

Вам нужно будет сделать несколько вещей, чтобы установить имя хоста:

  1. hostname newname - устанавливает имя хоста, но изменчиво
  2. edit / etc / hostname - устанавливает имя хоста для следующей перезагрузки
  3. edit / etc / hosts - чтобы sudo не жаловался

Я собрал их вместе в сценарий и загрузил в виде сущности: https://gist.github.com/mnebuerquo/5443532036af8b48995547e2817dba85

0 голосов
/ 07 января 2015

В моем Linux AMI (снимок другого экземпляра) .. ни одна из приведенных выше формул не сработала. Затем я просто изменил поле HOSTNAME в файле: /etc/init.d/modifyhostname и сделал обычную перезагрузку.

0 голосов
/ 29 марта 2013
sudo hostname *yourdesiredhostnamehere*

sudo /etc/init.d/networking restart

то имя хоста меняется. На моем сервере работают все остальные сервисы, такие как apache и postfix. Сервер Ubuntu 12.04 LTS

0 голосов
/ 12 ноября 2010

Решение /etc/rc.local у меня работало для базового имени хоста, но не дает мне полное доменное имя.

0 голосов
/ 02 марта 2009

Если вы не хотите связываться с вашим провайдером DNS, вы можете использовать псевдонимы для своих экземпляров. Я был очень удивлен, что Amazon не предоставил способ дать псевдоним для экземпляра EC2, когда они выпустили Консоль управления AWS , но в то же время вы можете использовать бесплатную RightScale сервис, если вам нужна функция псевдонима - гораздо проще, чем запоминать эти идентификаторы экземпляров Amazon.

...