Можем ли мы установить легко запоминающиеся имена хостов для экземпляров EC2?
-
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-имя.
Открой
/etc/sysconfig/network
файл конфигурации в вашем любимом текстовом редакторе и измените запись HOSTNAME, чтобы она отражала полное доменное имя (например, webserver.mydomain.com).HOSTNAME=webserver.mydomain.com
Перезагрузите экземпляр, чтобы получить новое имя хоста.
[ec2-user ~]$ sudo reboot
Войдите в свой экземпляр и убедитесь, что имя хоста обновлено.В вашем приглашении должно быть указано новое имя хоста (до первого знака «.»), а в команде имени хоста должно отображаться полное имя домена.
[ec2-user@webserver ~]$ hostname webserver.mydomain.com
Чтобы изменить имя хоста системы без общедоступного DNS-имени
Открой
/etc/sysconfig/network
файл конфигурации в вашем любимом текстовом редакторе и измените запись HOSTNAME, чтобы она отражала желаемое имя хоста системы (например, веб-сервер).HOSTNAME=webserver.localdomain
Открой
/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
Перезагрузите экземпляр, чтобы получить новое имя хоста.
[ec2-user ~]$ sudo reboot
Войдите в свой экземпляр и убедитесь, что имя хоста обновлено.В вашем приглашении должно быть указано новое имя хоста (до первого знака «.»), а в команде имени хоста должно отображаться полное имя домена.
[ec2-user@webserver ~]$ hostname webserver.localdomain
Примечание:Вы также можете изменить приглашение оболочки, не затрагивая имя хоста.Ссылаться на эта документация AWS.
Конечно, вы можете сделать это, если у вас есть собственный домен (настройте CNAME, чтобы он указывал на имя хоста Amazon).В противном случае вы в значительной степени застрянете с тем, который они вам дают (или с эластичным IP-адресом, если вы его настроили).
Решение /etc/rc.local помогло мне для базового имени хоста, но не дало мне полное доменное имя.
В моем Linux AMI (снимок другого экземпляра)..ни одна из приведенных выше формул не сработала.Затем я просто изменил поле HOSTNAME в файле:/etc/init.d/modifyhostname и выполнил обычную перезагрузку.
Вам нужно будет сделать несколько вещей, чтобы установить имя хоста:
hostname newname
- устанавливает имя хоста, но оно нестабильно- редактировать /etc/hostname — устанавливает имя хоста для следующей перезагрузки
- отредактируйте /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.