web-dev-qa-db-fra.com

Pouvons-nous définir des noms d'hôtes faciles à retenir pour les instances EC2?

J'exécute quelques instances Fedora standard sur EC2. Je pense que les noms d'hôte publics des instances attribuées par Amazon sont trop étranges et difficiles à retenir. Je voudrais les changer en quelque chose de court (comme rouge/bleu/vert/etc).

Y a-t-il un inconvénient à faire cela? Et comment le configurer de telle sorte qu'il persiste après les redémarrages?

Merci.

48
Nikhil Gupte

Avant de commencer, essayez d'exécuter hostname et hostname --fqdn et prenez note des réponses.

Vous pouvez modifier /etc/hostname et définissez un nom d'hôte qui restera après le redémarrage. Vous pouvez forcer le nom d'hôte à être "rechargé" en utilisant hostname -F /etc/hostname pour lire cette valeur dans le nom d'hôte. L'invite bash changera après votre déconnexion et votre connexion.

avertissement/note :
Oui, c'est bien d'avoir le nom d'hôte dans l'invite bash défini sur quelque chose de plus utile que ip-123-123-123-123 mais j'ai décidé de quitter le mien (au moins pour l'instant) car il semble que beaucoup de choses comptent vraiment sur le fait que le nom d'hôte sur les instances ec2 soit défini de manière standard. Après avoir modifié /etc/hostname et en changeant le nom d'hôte en webserver beaucoup de services semblent échouer car le nom d'hôte ne se résoudrait pas et Apache ne démarrerait pas. Ensuite, j'ai édité /etc/hosts et ajouté

127.0.0.1 webserver

comme deuxième ligne. Apache démarrerait alors mais se plaignait de ne pas trouver le FQDN. J'ai confirmé que l'exécution de hostname --fqdn ne fonctionnait plus.

Ensuite, j'ai consulté man hostname et a appris que même si vous pouvez définir le hostname, il semble que le FQDN est ce qui est renvoyé via une recherche DNS.

LE FQDN

Vous ne pouvez pas modifier le nom de domaine complet (tel que renvoyé par le nom d'hôte --fqdn) ou le nom de domaine DNS (tel que renvoyé par le nom de domaine dns) avec cette commande. Le nom de domaine complet du système est le nom que le résolveur (3) renvoie pour le nom d'hôte.

Techniquement: le nom de domaine complet est le nom renvoyé par getaddrinfo (3) pour le nom d'hôte renvoyé par gethostname (2). Le nom de domaine DNS est la partie après le premier point.

Par conséquent, cela dépend de la configuration (généralement dans /etc/Host.conf) comment vous pouvez la changer. Habituellement (si le fichier hosts est analysé avant DNS ou NIS), vous pouvez le changer dans/etc/hosts.

Je pense qu'il pourrait être possible de configurer le système/de tromper le système pour retourner le FQDN, quelque chose comme ip-123-123-123-123.ec2.internal même si le nom d'hôte est webserver mais à ce stade, il a commencé à sembler plus problématique qu'il n'en valait, et que pour moi d'avoir une invite de bash plus agréable pourrait causer beaucoup de problèmes de logiciel et de configuration sur la route et j'ai donc décidé d'abandonner.

J'ai également appris que de nombreuses instances Amazon ec2 utilisent quelque chose appelé cloud-init :

cloud-init est le package Ubuntu qui gère l'initialisation précoce d'une instance cloud. Il est installé dans les images Ubuntu Cloud et également dans les images officielles Ubuntu disponibles sur EC2.

Certaines des choses qu'il configure sont:

  • définition d'un paramètre régional par défaut
  • définition du nom d'hôte
  • générer des clés privées ssh
  • ajout de clés ssh au .ssh/authorized_keys de l'utilisateur afin qu'il puisse se connecter
  • configuration de points de montage éphémères

le comportement de cloud-init peut être configuré via les données utilisateur. Les données utilisateur peuvent être fournies par l'utilisateur au moment du lancement de l'instance. Cela se fait via l'argument --user-data ou --user-data-file à ec2-run-instances

J'ai aussi trouvé ça qui parle de la façon dont le nom d'hôte est configuré avec cloud-init:

Sur les instances EBS, un arrêt et un démarrage ultérieur aboutiraient à une adresse IP différente.

Dans le cas où l'utilisateur n'a pas modifié/etc/hostname à partir de sa valeur d'origine (initialisé par le `` local-hostname '' des métadonnées), cloud-init définira à nouveau le nom d'hôte et mettra à jour/etc/hostname.

Dans le cas où l'utilisateur a modifié/etc/hostname, il restera géré par l'utilisateur.

De plus, si /etc/cloud/cloud.cfg contient une valeur 'conserve_nom_hôte' définie sur une valeur vraie, alors/etc/hostname ne sera jamais touché.

La conclusion intéressante est que si vous ne changez pas le nom d'hôte, le package cloud-init le tiendra à jour pour vous.

Si quelqu'un d'autre a une solution de contournement ou peut résoudre certains des problèmes mentionnés et aider à rassurer que rien ne se cassera sur les instances ec2 en raison du changement de nom d'hôte, je serais heureux de l'entendre.

85
cwd

Une autre façon consiste à simplement modifier ~/.bashrc et ajouter PS1 avec le surnom de la machine.

Modifier: peut-être plus correctement, à l'échelle de la machine, par exemple sur l'AWS Linux AMI (un exemple) (collez-le dans la console ou ajoutez-le à votre installation arbitraire .sh):

cat << EOF | Sudo tee /etc/profile.d/ps1.sh
if [ "$PS1" ]; then
  PS1="[\u@myinst1:\l \t \! \W]\\$ "
fi
EOF
13
youurayy

Éditer /etc/sysconfig/network en tant que root.

Remplacer

HOSTNAME=localhost.localdomain

avec

HOSTNAME=hostname.DOMAIN_NAME

Ensuite, redémarrez ou exécutez /etc/init.d/network restart Le serveur doit alors signaler son nom en tant que nom de domaine complet.

12
andrew rimmer

De ce site :

Modifier le nom d'hôte sur un système en cours d'exécution

Sur n'importe quel système Linux, vous pouvez changer son nom d'hôte avec la commande hostname (surpris?)… Voici quelques utilisations rapides du nom d'hôte de la ligne de commande:

$> hostname

sans aucun paramètre, il affichera le nom d'hôte actuel du système.

$> hostname --fqd

il affichera le nom de domaine complet (ou FQDN) du système.

$> hostname NEW_NAME

définira le nom d'hôte du système sur NEW_NAME.

Vous pouvez également modifier /etc/hostname (au moins sur Ubuntu).

Pour vous assurer qu'il reste après un redémarrage dans AWS, ajoutez la commande dans /etc/rc.local afin qu'il s'exécute au démarrage de la machine.

Il existe également un moyen de définir le nom d'hôte dynamiquement 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
6
Rafa

Pour changer le nom d'hôte du système en un nom DNS public

Suivez cette procédure si vous avez déjà enregistré un nom DNS public

  1. Ouvrez le /etc/sysconfig/network fichier de configuration dans votre éditeur de texte préféré et modifiez l'entrée HOSTNAME pour refléter le nom de domaine complet (tel que webserver.mydomain.com).

    HOSTNAME=webserver.mydomain.com
    
  2. Redémarrez l'instance pour récupérer le nouveau nom d'hôte.

    [ec2-user ~]$ Sudo reboot
    
  3. Connectez-vous à votre instance et vérifiez que le nom d'hôte a été mis à jour. Votre invite doit afficher le nouveau nom d'hôte (jusqu'au premier ".") Et la commande hostname doit afficher le nom de domaine complet.

    [ec2-user@webserver ~]$ hostname
    webserver.mydomain.com
    

Pour modifier le nom d'hôte du système sans nom DNS public

  1. Ouvrez le /etc/sysconfig/network fichier de configuration dans votre éditeur de texte préféré et modifiez l'entrée HOSTNAME pour refléter le nom d'hôte du système souhaité (tel que serveur Web).

    HOSTNAME=webserver.localdomain
    
  2. Ouvrez le /etc/hosts fichier dans votre éditeur de texte préféré et ajoutez une entrée commençant par 127.0.1.1 (sur les systèmes DHCP) ou l'adresse de eth0 (sur les systèmes IP statiques) pour correspondre à l'exemple ci-dessous, en remplaçant votre propre nom d'hôte. (127.0.0.1 doit être laissé comme ligne d'hôte local.)

    127.0.0.1   localhost localhost.localdomain
    127.0.1.1   webserver.example.com webserver
    
  3. Redémarrez l'instance pour récupérer le nouveau nom d'hôte.

    [ec2-user ~]$ Sudo reboot
    
  4. Connectez-vous à votre instance et vérifiez que le nom d'hôte a été mis à jour. Votre invite doit afficher le nouveau nom d'hôte (jusqu'au premier ".") Et la commande hostname doit afficher le nom de domaine complet.

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

Remarque: Vous pouvez également modifier l'invite du shell sans affecter le nom d'hôte. Reportez-vous à cette documentation AWS .

1
manish_s

Vous devrez effectuer plusieurs opérations pour définir le nom d'hôte:

  1. hostname newname - définit le nom d'hôte, mais est volatile
  2. edit/etc/hostname - définit le nom d'hôte pour le prochain redémarrage
  3. modifier/etc/hosts - pour empêcher Sudo de se plaindre

Je les ai réunis dans un script et l'ai téléchargé sous forme de Gist: https://Gist.github.com/mnebuerquo/5443532036af8b48995547e2817dba85

0
Mnebuerquo

Bien sûr, vous pouvez le faire si vous avez votre propre domaine (configurez un CNAME pour pointer vers le nom d'hôte Amazon). Sinon, vous êtes à peu près coincé avec celui qu'ils vous donnent (ou une adresse IP élastique, si vous en configurez une).

0
obeattie

La solution /etc/rc.local a fonctionné pour moi pour un nom d'hôte de base mais ne me donne pas de nom de domaine complet.

0
chrowe

Dans mon AMI Linux (un instantané d'une autre instance) .. aucune des formules ci-dessus n'a fonctionné. Ensuite, j'ai simplement changé le champ HOSTNAME dans le fichier: /etc/init.d/modifyhostname et j'ai fait un redémarrage normal.

0
Blackpirate