51 votes

Peut-on définir des noms d'hôtes faciles à mémoriser pour les instances EC2 ?

Je fais tourner deux instances Fedora standard sur EC2. Je pense que les noms d'hôtes publics des instances attribués par Amazon sont trop bizarres et difficiles à retenir. J'aimerais les remplacer par quelque chose de court (comme rouge/bleu/vert/etc).

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

Merci.

0 votes

Pour le configurer, vous devrez probablement spécifier le système que vous utilisez. Voir aussi : Quelles sont les ramifications de la définition du nom d'hôte ? .

89voto

cwd Points 8723

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

Vous pouvez modifier /etc/hostname et définir un nom d'hôte, qui sera conservé après le redémarrage. Vous pouvez forcer le nom d'hôte à être "rechargé" en utilisant la commande hostname -F /etc/hostname pour lire cette valeur dans le nom d'hôte. L'invite bash changera après que vous vous soyez déconnecté et connecté.

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

127.0.0.1 webserver

comme deuxième ligne. Apache a alors démarré mais s'est plaint de ne pas pouvoir trouver le FQDN. J'ai confirmé que l'exécution de hostname --fqdn ne fonctionnait plus.

Ensuite, j'ai consulté man hostname et j'ai appris que si l'on peut régler le hostname il apparaît que le FQDN est ce qui est renvoyé par une recherche DNS.

LE FQDN

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

Techniquement : Le FQDN est le nom que getaddrinfo(3) renvoie 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, la façon dont vous pouvez le modifier dépend de la configuration (généralement dans /etc/host.conf). Habituellement (si le fichier hosts est analysé avant DNS ou NIS), vous pouvez le modifier dans /etc/hosts.

Je pense qu'il pourrait être possible de configurer le système / de tromper le système pour qu'il renvoie 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 m'a semblé qu'il y avait plus de problèmes que cela n'en valait la peine, et que pour moi, avoir une invite bash plus agréable pourrait causer beaucoup de problèmes de logiciels et de configuration sur la route, alors j'ai décidé d'abandonner.

J'ai aussi appris que beaucoup d'instances amazon ec2 utilisent quelque chose appelé cloud-init :

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

Certaines des choses qu'il configure sont :

  • définir une locale par défaut
  • paramétrage du nom d'hôte
  • générer des clés privées ssh
  • ajout de clés ssh au fichier .ssh/authorized_keys de l'utilisateur pour qu'il puisse se connecter
  • mise en place 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. Ceci est fait via l'argument --user-data ou --user-data-file de ec2-run-instances.

J'ai aussi trouvé ceci qui explique comment le nom d'hôte est configuré avec cloud-init :

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

Dans le cas où l'utilisateur n'a pas modifié /etc/hostname par rapport à sa valeur d'origine (déterminée par le 'local-hostname' des métadonnées), cloud-init définit à nouveau le nom d'hôte et met à jour /etc/hostname.

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

En outre, si le fichier /etc/cloud/cloud.cfg contient la valeur 'preserve_hostname' définie sur True, le fichier /etc/hostname ne sera jamais modifié.

Il est intéressant de noter que si vous ne changez pas le nom d'hôte, le paquet cloud-init le mettra à 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 sera cassé sur les instances ec2 à cause du changement du nom d'hôte, je serais heureux de l'entendre.

3 votes

Vous devez tromper la machine afin de fixer "hostname --fqdn". Cela fonctionne si vous ajoutez à /etc/hosts quelque chose comme "127.0.0.1 webserver.example.com webserver". La syntaxe attendue pour le fichier hosts est "ip hostname alias".

4 votes

Lien vers les documents : docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-hostname.html (Note : C'est écrit en supposant Amazon Linux ; j'utilise Ubuntu, donc j'éditerais /etc/hostname au lieu de /etc/sysconfig/networking).

0 votes

Découvrez la réponse la plus votée à votre question précédente et il vous indique comment obtenir le hostname --fqdn pour travailler : Vous avez juste besoin d'un nom de domaine qui se résout, que ce soit parce que vous avez un domaine enregistré et pointé vers la boîte ou parce que vous l'avez "piégé" comme le suggère @saltwaterc. L'un ou l'autre fonctionne.

13voto

ypocat Points 871

Une autre méthode consiste à modifier simplement ~/.bashrc et ajouter au préalable PS1 avec le surnom de la machine.

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

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

0 votes

$PS1 remplacé par sa valeur, pouvez-vous corriger votre réponse, s'il vous plaît ?

12voto

andrew rimmer Points 61

Modifier /etc/sysconfig/network en tant que racine.

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 sous la forme d'un FQDN.

1 votes

Je m'assure normalement que le nouveau nom est aussi dans /etc/hosts.

1 votes

Pour un changement majeur comme le changement de nom d'hôte, n'est-il pas plus sage de faire un redémarrage complet plutôt que de redémarrer un seul service ? Que se passe-t-il si d'autres services ne parviennent pas à démarrer avec le même nom ? Amazon recommande le redémarrage : docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-hostname.html

7voto

Rafa Points 715

De ce site :

Changer le nom d'hôte sur un système en fonctionnement

Sur tout 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 en 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

va définir le nom d'hôte du système comme NEW_NAME .

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

Pour s'assurer qu'il reste après un redémarrage dans AWS, soit ajouter la commande dans /etc/rc.local pour qu'il fonctionne quand la machine démarre.

Il y a aussi un moyen de définir le nom d'hôte de façon dynamique 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

1voto

manish_s Points 1045

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 dans votre éditeur de texte préféré et modifiez l'entrée HOSTNAME pour refléter le nom de domaine entièrement qualifié (tel que webserver.mydomain.com).

    HOSTNAME=webserver.mydomain.com
  2. Redémarrez l'instance pour qu'elle prenne 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 entièrement qualifié.

    [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 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 le serveur Web).

    HOSTNAME=webserver.localdomain
  2. Ouvrez le /etc/hosts 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 substituant votre propre nom d'hôte. (127.0.0.1 doit être laissé comme la ligne localhost).

    127.0.0.1   localhost localhost.localdomain
    127.0.1.1   webserver.example.com webserver
  3. Redémarrez l'instance pour qu'elle prenne 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 entièrement qualifié.

    [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 .

3 votes

Bonne réponse, mais vous devriez préciser que vous avez simplement copié la documentation d'AWS. stackoverflow.com/help/référencement

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X