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.
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.
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
É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.
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
Pour changer le nom d'hôte du système en un nom DNS public
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
Redémarrez l'instance pour récupérer le nouveau nom d'hôte.
[ec2-user ~]$ Sudo reboot
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
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
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
Redémarrez l'instance pour récupérer le nouveau nom d'hôte.
[ec2-user ~]$ Sudo reboot
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 .
Vous devrez effectuer plusieurs opérations pour définir le nom d'hôte:
hostname newname
- définit le nom d'hôte, mais est volatileJe les ai réunis dans un script et l'ai téléchargé sous forme de Gist: https://Gist.github.com/mnebuerquo/5443532036af8b48995547e2817dba85
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).
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.
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.