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

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

  •  03-07-2019
  •  | 
  •  

Question

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 à mémoriser. Je voudrais les changer en quelque chose de court (comme rouge / bleu / vert / etc).

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

Merci.

Était-ce utile?

La solution

Avant de commencer, essayez d'exécuter nom d'hôte et nom d'hôte --fqdn et notez les réponses.

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

avertissement / remarque :
Oui, il est bon de définir le nom d’hôte dans l’invite bash sur quelque chose de plus utile que ip-123-123-123-123 , mais j’ai décidé de quitter le mien (du moins pour le moment) car il semble que beaucoup de choses comptent vraiment sur le nom d'hôte sur les instances ec2 défini de manière standard. Après avoir édité / etc / hostname et modifié le nom d'hôte en serveur Web , de nombreux services semblent échouer car le nom d'hôte ne serait pas résolu et Apache ne pouvait pas démarrer. J'ai ensuite édité / etc / hosts et ajouté dans

127.0.0.1 webserver

comme deuxième ligne. Apache démarre alors mais se plaint de ne pas pouvoir trouver le nom de domaine complet. J'ai confirmé que l'exécution de nom_hôte --fqdn ne fonctionnait plus.

Ensuite, j'ai consulté nom d'hôte man et appris que, si vous pouvez définir le nom d'hôte , il semble que le FQDN soit ce qui est renvoyé via un serveur DNS. Chercher.

  

LE FQDN

     

Vous ne pouvez pas modifier le nom de domaine complet (renvoyé par le nom d'hôte --fqdn) ni le nom de domaine DNS (renvoyé par le nom de domaine dns) à l'aide de cette commande. Le nom de domaine complet du système correspond au nom renvoyé par le résolveur (3) pour le nom d'hôte.

     

Techniquement: le nom de domaine complet 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, cela dépend de la configuration (généralement dans /etc/host.conf) de la façon dont vous pouvez le changer. Généralement (si le fichier hosts est analysé avant DNS ou NIS), vous pouvez le changer dans / etc / hosts.

Je pense qu'il serait peut-être possible de définir le système / tromper le système pour qu'il renvoie le nom de domaine complet, quelque chose comme ip-123-123-123-123.ec2.internal même si le nom d'hôte est < code> webserver , mais à ce stade, cela a semblé être plus ennuyeux que ça en valait la peine, et pour moi, avoir une invite plus agréable, cela pourrait causer beaucoup de problèmes de logiciel et de configuration plus tard, et j’ai décidé de donner up.

J'ai également appris que de nombreuses instances d'Amazon ec2 utilisent un système appelé cloud-init :

  

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

     

Certaines des choses qu’il configure sont:

     
      
  • définir un environnement local 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 / registered_keys de l'utilisateur afin qu'il puisse se connecter
  •   
  • configuration des 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 à ec2-run-instances

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

  

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

     

Dans le cas où l'utilisateur n'a pas modifié / etc / hostname à partir de sa valeur d'origine (ensemencée par le 'nom d'hôte local' des métadonnées), alors cloud-init définira à nouveau le nom d'hôte et mettra à jour le fichier / 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 la valeur 'preserve_hostname' définie sur True, alors / etc / hostname ne sera jamais touché.

Ce qu'il faut retenir, c'est que si vous ne modifiez pas le nom d'hôte, le paquet cloud-init le gardera à jour pour vous.

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

Autres conseils

Une autre méthode consiste simplement à éditer ~ / .bashrc et à ajouter à PS1 le surnom de la machine.

Modifier: peut-être plus correctement, à l'échelle de la machine, par exemple. sur l’AMI AWS Linux (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

Modifiez / 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 en tant que nom de domaine complet.

De ce site :

  

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

     

Sur tout système Linux, vous pouvez modifier son nom d'hôte à l'aide de la commande nomhôte (surpris?) & # 8230;   Voici quelques utilisations rapides du nom d’hôte en ligne de commande:

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
gt; hostname NEW_NAME
gt; hostname --fqd
gt; hostname
     

sans paramètre, le nom d'hôte actuel du système sera généré.

<*>      

le nom de domaine complet (ou nom de domaine complet) du système sera généré.

<*>      

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

Vous pouvez également éditer / 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 pour qu'elle 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 :

<*>

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

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

  1. Ouvrez le fichier de configuration / etc / sysconfig / network dans votre éditeur de texte favori et modifiez l'entrée HOSTNAME pour qu'elle reflète 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 indiquer le nouveau nom d’hôte (jusqu’au premier ".") Et la commande hostname doit indiquer le nom de domaine complet.

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

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

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

    HOSTNAME=webserver.localdomain
    
  2. Ouvrez le fichier / etc / hosts dans votre éditeur de texte favori 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 qu'elle corresponde l'exemple ci-dessous, en remplaçant votre propre nom d'hôte. (127.0.0.1 doit rester en tant que ligne localhost.)

    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@webserver ~]$ hostname
    webserver.localdomain
    
  4. Connectez-vous à votre instance et vérifiez que le nom d'hôte a été mis à jour. Votre invite doit indiquer le nouveau nom d’hôte (jusqu’au premier ".") Et la commande hostname doit indiquer le nom de domaine complet.

    <*>

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

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

La solution /etc/rc.local fonctionnait pour moi pour un nom d’hôte de base, mais ne me donnait pas de nom de domaine complet.

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 procédé à un redémarrage normal.

Vous devrez faire plusieurs choses pour définir le nom d'hôte:

  1. nom d'hôte nouveau nom - 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 rassemblés dans un script et je l'ai téléchargé comme un résumé: https://gist.github.com/mnebuerquo/5443532036af8b48995547e2817dba85

Si vous ne voulez pas toucher à votre fournisseur DNS, vous pouvez utiliser des alias pour vos instances. J'ai été vraiment surpris qu'Amazon ne fournisse pas un moyen de donner un alias pour une instance EC2 quand ils sont sortis avec le AWS Management Console , mais vous pouvez également utiliser le service gratuit RightScale si vous le souhaitez. la fonctionnalité alias - beaucoup plus facile que de se souvenir de ces ID d'instance Amazon.

sudo hostname *yourdesiredhostnamehere*

sudo /etc/init.d/networking restart

alors le nom d'hôte est changé. Sur mon serveur, tous les autres services comme apache et postfix fonctionnent. Le serveur est Ubuntu 12.04 LTS

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top