¿Cuál es la diferencia entre Host y HostName en SSH Config?

23

La página del manual dice esto:

Anfitrión

Host Restringe que las siguientes declaraciones (hasta la siguiente palabra clave Host) sean solo para aquellos hosts que coincidan con uno de los patrones dados después de la palabra clave. Si se proporciona más de un patrón, deben estar separados por espacios en blanco. Se puede usar un solo '*' como patrón para proporcionar valores predeterminados globales para todos los hosts. El host es el argumento del nombre de host dado en la línea de comando (es decir, el nombre no se convierte en un nombre de host canonicalizado antes de la coincidencia).

Se puede negar una entrada de patrón con el prefijo con un signo de exclamación (`! '). Si se coincide con una entrada negada, se ignora la entrada del Host, independientemente de si coinciden otros patrones en la línea. Por lo tanto, las coincidencias negadas son útiles para proporcionar excepciones para las coincidencias con comodines.>

Ver PATRONES para más información sobre patrones.

HostName

HostName Especifica el nombre de host real para iniciar sesión. Esto se puede usar para especificar apodos o abreviaturas para hosts. Si el nombre de host contiene la secuencia de caracteres '% h', se reemplazará con el nombre de host especificado en la línea de comando (esto es útil para manipular nombres no calificados). El valor predeterminado es el nombre dado en la línea de comando. Las direcciones IP numéricas también están permitidas (tanto en la línea de comando como en las especificaciones de HostName).

Por ejemplo, cuando quiero crear una configuración SSH para GitHub, ¿qué deben ser Host y HostName respectivamente?

TheFooProgrammer
fuente
3
En esencia: Hostes la cadena que el usuario da como entrada en la CLI al invocar SSH; HostNamees la cadena que la voluntad cliente SSH de salida por la red al intentar conectarse al servidor.
sampablokuper

Respuestas:

15

Para github.com, ~/.ssh/configpodría verse así

Host github.com
    IdentityFile ~/.ssh/key_name_for_github

Para el nombre de host: como dice man, le permite especificar la abreviatura de host. Por ejemplo, si te ~/.ssh/configves así

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

Entonces cuando escribes

  • ssh host1en realidad inicias sesión en host1.example.com
  • ssh host2iniciar sesión en anotherdomain.com
En t
fuente
¿Supongo que en su segundo ~/.ssh/configejemplo quiso decir 'Nombre de host' en lugar de 'Host' ?
Dave
6

En uso simple:

Host es el nombre de host real y no hay HostName

O

Hostes el apodo del host y HostNamees el nombre de host real.

Ejemplo 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>"

Nota: La página de manual es técnicamente correcta, está redactada de manera un poco extraña. Añadiría algunas palabras más para mayor claridad:HostName Specifies the real host name to log into. This can be used *TOGETHER WITH 'HOST'* to specify nicknames or abbreviations for hosts.

mblakesley
fuente
1

Hace poco quería hacer algo con el host y el nombre de host, pero olvidé la sintaxis exacta ... pero buscar en Google fue un desastre y la página de manual no fue muy útil. Entonces, suponiendo que haya otros que tengan la misma necesidad, aquí están mis cositas.

El host especifica el argumento de la línea de comando y podría considerarse como a) nombre / IP del host real, b) taquigrafía, c) alias. HostName es el nombre de host / IP real de la máquina a la que se está conectando. En el campo HostName, puede usar% h como la cadena de nombre de host que especifique en la línea de comando. (Esta fue la parte que quería usar en mi ejemplo).

Entonces, supongamos que tiene un conjunto de hosts donde el nombre de host comienza con my-proj-host -... y todos están en el dominio .my.proj.domain.com, y necesito iniciar sesión en ellos utilizando una clave ssh específica my-proj-id-rsa e ID de usuario específico my-proj-user. Para hacer mi vida más fácil, agregaría lo siguiente al archivo ~ / .ssh / config

Host my-proj-host *

HostName% h.my.proj.domain.com

Usuario my-proj-user

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

Ahora puedo escribir

ssh my-proj-host-1234

Sin la configuración, eso hubiera sido

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

ahorrando un poco de tipeo (y errores tipográficos).

Marcus Yoo
fuente