Можем ли мы установить легко запоминающиеся имена хостов для экземпляров EC2?

StackOverflow https://stackoverflow.com/questions/603351

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

Спасибо.

Это было полезно?

Решение

Прежде чем начать, попробуйте запустить 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).Полное доменное имя системы — это имя, которое преобразователь(3) возвращает для имени хоста.

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

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

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

Я также узнал, что многие экземпляры Amazon ec2 используют нечто, называемое облачная инициализация:

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

Вот некоторые из вещей, которые он настраивает:

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

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

Другие советы

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

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

Заменять

HOSTNAME=localhost.localdomain

с

HOSTNAME=hostname.DOMAIN_NAME

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

От этот сайт:

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

В любой системе 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

Чтобы изменить имя хоста системы на общедоступное DNS-имя

Выполните эту процедуру, если у вас уже зарегистрировано общедоступное DNS-имя.

  1. Открой /etc/sysconfig/network файл конфигурации в вашем любимом текстовом редакторе и измените запись HOSTNAME, чтобы она отражала полное доменное имя (например, webserver.mydomain.com).

    HOSTNAME=webserver.mydomain.com
    
  2. Перезагрузите экземпляр, чтобы получить новое имя хоста.

    [ec2-user ~]$ sudo reboot
    
  3. Войдите в свой экземпляр и убедитесь, что имя хоста обновлено.В вашем приглашении должно быть указано новое имя хоста (до первого знака «.»), а в команде имени хоста должно отображаться полное имя домена.

    [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. Войдите в свой экземпляр и убедитесь, что имя хоста обновлено.В вашем приглашении должно быть указано новое имя хоста (до первого знака «.»), а в команде имени хоста должно отображаться полное имя домена.

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

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

Конечно, вы можете сделать это, если у вас есть собственный домен (настройте CNAME, чтобы он указывал на имя хоста Amazon).В противном случае вы в значительной степени застрянете с тем, который они вам дают (или с эластичным IP-адресом, если вы его настроили).

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

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

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

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

Я объединил их в скрипт и загрузил его как суть:https://gist.github.com/mnebuerquo/5443532036af8b48995547e2817dba85

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

sudo hostname *yourdesiredhostnamehere*

sudo /etc/init.d/networking restart

затем имя хоста меняется.На моем сервере работают все остальные службы, такие как Apache и Postfix.Сервер — Ubuntu 12.04 LTS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top