J'ai mis en place des scripts shell (tiers), qui sont censés se connecter à l'hôte distant et démarrer des démons (hadoop, si cela est important). Ces scripts s'appuient fortement sur hostname pour configurer les dossiers pid, les directorys de données, etc.
Ce que je dois faire maintenant est de créer un environnement de test / développement sur une seule machine, en utilisant Arch, ce qui signifie:
donc j'ai besoin de résoudre 2 problèmes:
et tout cela se passe sur le même ordinateur.
Bien que vous ne puissiez pas modifier le nom d'hôte pour un seul process (enfin, cela peut être possible avec des namespaces), vous pouvez modifier la variable d'environnement HOSTNAME
.
En ce qui concerne la transmission des variables environmnet du client vers le server, voir les AcceptEnv
et PermitUserEnvironment
pour sshd
et SendEnv
pour ssh
(voir les pages de sshd_config(5)
et ssh_config(5)
pour plus de détails).
Le nom d'hôte d'un système n'est pas quelque chose que vous pouvez programmer simplement comme une utilisation régulière, et il n'y a pas non plus de variable d'environnement qui changera cela efficacement.
Vous pouvez voir une variable telle que $HOSTNAME
mais cela est souvent juste pour des raisons de commodité et ne change pas le nom d'hôte de votre système de manière significative.
Je pense que si j'étais vous je choisirais une variable d'environnement de mon choix et l'établirais au moment de la connection dans le cadre de l'environnement de l'user peut-être, puis utiliser cette variable en aval dans les scripts, au lieu d'essayer de coopérer nom d'hôte du système.
Vous pouvez modifier le nom d'un système de manière lâche en exécutant la command suivante:
$ sudo hostname <somename>
Cependant, cette approche peut être délicate étant donné que le nom d'hôte est souvent stocké dans une variété d'endroits, dont certains ne sont lus qu'une seule fois lors du démarrage et jamais plus.
Compte tenu de cela, je findai un path difficile à suivre, et ce sera avec beaucoup de piratage et de slashing pour surcharger le nom d'hôte du système d'une manière facile.
Je vais vous laisser ce guide qui montre certaines des choses qui vont probablement vous trébucher lorsque vous essayez de le faire. Il s'intitule: Comment changer le nom d'hôte d'un système Linux .
SSH est généralement configuré pour passer certaines variables d'environnement considérées comme sûres et indépendantes du système, à savoir les variables d'environnement liées aux parameters régionaux: LC_*
. Ainsi, sur de nombreuses installations, vous pouvez transmettre des données via l'environnement en définissant une variable comme LC_DESIRED_HOSTNAME
. Les variables d'environnement que le server vous laisse passer sont déterminées par le paramètre AcceptEnv
dans sshd_config
et les variables d'environnement que le client tente de transmettre sont déterminées par le paramètre SendEnv
dans ~/.ssh/config
.
Vous pouvez définir le nom d'hôte pour tous les process jusqu'au prochain redémarrage en appelant la command hostname
avec un argument en tant que root.
Sous Linux, si vous exécutez unshare -u someprogram
, alors someprogram
et ses sous-process s'exécuteront dans un espace de noms séparé ayant son propre nom d'hôte. Le nom d'hôte à l'intérieur de l'espace de noms est identique au rest du système, mais il peut être modifié indépendamment. Cela doit être fait en tant que root sauf si votre version de kernel est de 3.8 ou supérieure.
unshare -u -- sh -c 'hostname "$LC_HOSTNAME"; service hadoop start'