Définition de la variable nom d'hôte juste après la connection SSH

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:

  • configurez / etc / hosts pour fournir des alias à 127.0.0.1, comme data1, data2, data3 (c'est la partie sortingviale)
  • configurer l'access SSH sans mot de passe à localhost (qui est également sortingvial)
  • en quelque sorte définir le nom d'hôte pour la session SSH actuelle, comme si je me connecte en utilisant 'ssh data1' – alors le nom d'hôte devrait être "data1" – et c'est ce que je ne peux pas comprendre.

donc j'ai besoin de résoudre 2 problèmes:

  • comment passer une variable d'environnement ou quelque chose comme ça à l'hôte distant, donc il sera visible pour tous les scripts là-bas
  • comment définir le nom d'hôte sur l'hôte distant pour cette session uniquement

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.

La command hostname

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'