Quelle est la différence entre Host et HostName dans SSH Config?

23

La page de manuel dit ceci:

Hôte

Host Restreint les déclarations suivantes (jusqu'au prochain mot-clé Host) à ne concerner que les hôtes qui correspondent à l'un des modèles indiqués après le mot-clé. Si plusieurs motifs sont fournis, ils doivent être séparés par des espaces. Un seul «*» comme modèle peut être utilisé pour fournir des valeurs par défaut globales à tous les hôtes. L'hôte est l'argument de nom d'hôte donné sur la ligne de commande (c'est-à-dire que le nom n'est pas converti en nom d'hôte canonisé avant la correspondance).

Une entrée de modèle peut être annulée en la préfixant avec un point d'exclamation (`! '). Si une entrée annulée est mise en correspondance, l'entrée Hôte est ignorée, que les autres modèles de la ligne correspondent ou non. Les correspondances négatives sont donc utiles pour fournir des exceptions pour les correspondances génériques.>

Voir MODÈLES pour plus d'informations sur les modèles.

HostName

HostName Spécifie le vrai nom d'hôte auquel se connecter. Cela peut être utilisé pour spécifier des surnoms ou des abréviations pour les hôtes. Si le nom d'hôte contient la séquence de caractères `% h ', celle-ci sera remplacée par le nom d'hôte spécifié sur la ligne de commande (ceci est utile pour manipuler des noms non qualifiés). La valeur par défaut est le nom donné sur la ligne de commande. Les adresses IP numériques sont également autorisées (à la fois sur la ligne de commande et dans les spécifications HostName).

Par exemple, lorsque je veux créer une configuration SSH pour GitHub, que doivent être respectivement Host et HostName?

TheFooProgrammer
la source
3
En substance: Hostest la chaîne que l'utilisateur donne en entrée sur la CLI lors de l'appel de SSH; HostNameest la chaîne que le client SSH affichera sur le réseau lors de la tentative de connexion au serveur.
sampablokuper

Réponses:

15

Pour github.com, vous ~/.ssh/configpourriez ressembler à ceci

Host github.com
    IdentityFile ~/.ssh/key_name_for_github

Pour le nom d'hôte: comme l'homme le dit, il vous permet de spécifier l'abréviation de l'hôte. Par exemple, si votre ~/.ssh/configapparence ressemble à ceci

Host host1
    HostName host1.example.com
Host host2
    HostName anotherdomain.com

Ensuite, lorsque vous tapez

  • ssh host1vous vous connectez réellement à host1.example.com
  • ssh host2connectez-vous à anotherdomain.com
int
la source
Je suppose que vous vouliez dire "Hostname" au lieu de "Host" dans votre deuxième ~/.ssh/configexemple?
Dave
6

En utilisation simple:

Host est le nom d'hôte réel et il n'y a pas HostName

OU

Hostest le surnom de l'hôte et HostNameest le nom d'hôte réel.

Exemple simple:

$ cat ~/.ssh/config
Host dev
    Hostname <hostname>
    User <username>
    IdentityFile <path_to_private_key>

$ ssh dev
# Equivalent to "ssh -i <path_to_private_key> <username>@<hostname>"

Remarque: La page de manuel est techniquement correcte, elle est juste formulée un peu étrangement. J'ajouterais quelques mots pour plus de clarté:HostName Specifies the real host name to log into. This can be used *TOGETHER WITH 'HOST'* to specify nicknames or abbreviations for hosts.

mblakesley
la source
1

J'ai récemment voulu faire quelque chose avec host et hostname, mais j'ai oublié la syntaxe exacte ... mais googler à ce sujet était un gâchis et la page de manuel n'était pas trop utile. Donc, en supposant qu'il y en a d'autres qui ont le même besoin, voici mes friandises.

L'hôte spécifie l'argument de la ligne de commande et peut être considéré comme un) nom d'hôte / IP réel, b) raccourci, c) alias. Le nom d'hôte est le véritable nom d'hôte / IP de la machine à laquelle vous vous connectez. Dans le champ HostName, vous pouvez utiliser% h comme chaîne de nom d'hôte que vous spécifiez sur la ligne de commande. (C'était la partie que je voulais utiliser dans mon exemple.)

Supposons donc que vous ayez un ensemble d'hôtes où le nom d'hôte commence par my-proj-host -... et qu'ils se trouvent tous dans le domaine .my.proj.domain.com, et que je dois me connecter à eux en utilisant une clé ssh spécifique my-proj-id-rsa et l'ID utilisateur spécifique my-proj-user. Pour me faciliter la vie, j'ajouterais ce qui suit au fichier ~ / .ssh / config

Hôte my-proj-host *

HostName% h.my.proj.domain.com

Utilisateur my-proj-user

IdentityFile ~ / .ssh / my-proj-id-rsa

Maintenant, je peux taper

ssh my-proj-host-1234

Sans la config, cela aurait été

ssh -i ~ / .ssh / my-proj-id-rsa [email protected]

économiser un peu de frappe (et de fautes de frappe).

Marcus Yoo
la source