49

The man page says this:

Host

Host Restricts the following declarations (up to the next Host keyword) to be only for those hosts that match one of the patterns given after the keyword. If more than one pattern is provided, they should be separated by whitespace. A single `*' as a pattern can be used to provide global defaults for all hosts. The host is the hostname argument given on the command line (i.e. the name is not converted to a canonicalized host name before matching).

A pattern entry may be negated by prefixing it with an exclamation mark (`!'). If a negated entry is matched, then the Host entry is ignored, regardless of whether any other patterns on the line match. Negated matches are therefore useful to provide exceptions for wildcard matches.>

See PATTERNS for more information on patterns.

HostName

HostName Specifies the real host name to log into. This can be used to specify nicknames or abbreviations for hosts. If the hostname contains the character sequence `%h', then this will be replaced with the host name specified on the command line (this is useful for manipulating unqualified names). The default is the name given on the com- mand line. Numeric IP addresses are also permitted (both on the command line and in HostName specifications).

For example, when I want to create an SSH Config for GitHub, what should Host and HostName be respectively?

2
  • 4
    In essence: Host is the string the user gives as input on the CLI when invoking SSH; HostName is the string that the SSH client will output over the network when attempting to connect to the server.
    – user11574
    Commented May 26, 2018 at 1:39
  • No, ssh does not send any hostname to the server. Why would it? stackoverflow.com/q/52455205/1151724
    – goldilocks
    Commented Apr 30, 2023 at 14:06

3 Answers 3

33

For github.com your ~/.ssh/config might look like this

Host github.com
    IdentityFile ~/.ssh/key_name_for_github

For hostname: as man says it allows you to specify abbreviation for host. For example, if your ~/.ssh/config look like this

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

Then when you type

  • ssh host1 you actually login to host1.example.com
  • ssh host2 login to anotherdomain.com
1
  • I'm guessing that you meant 'Hostname' instead of 'Host' in your second ~/.ssh/config example?
    – Dave
    Commented Jul 22, 2016 at 19:22
14

In simple usage:

Host is the actual hostname & there's no HostName

OR

Host is the nickname of the host & HostName is the actual hostname.

Simple example:

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

Note: The man page is technically correct, it's just worded a bit strangely. I would add a few more words for clarity: HostName Specifies the real host name to log into. This can be used *TOGETHER WITH 'HOST'* to specify nicknames or abbreviations for hosts.

3

I recently wanted to do something with host and hostname, but forgot the exact syntax... but googling about it was a mess and man page wasn't too helpful. So, assuming there are others who has the same need, here are my tidbits.

Host specifies the command line argument, and could be thought of as a) actual host name/IP, b) shorthand, c) alias. The HostName is the real hostname/IP of the machine you are connecting to. In the HostName field, you can use %h as the host name string you specify on the command line. (This was the part I wanted to use in my example.)

So, let's say you have a set of hosts where hostname starts with my-proj-host-... and they are all in domain .my.proj.domain.com, and I need to log in to them using specific ssh key my-proj-id-rsa and specific user ID my-proj-user. To make my life easier, I would add the following to ~/.ssh/config file

Host my-proj-host*

HostName %h.my.proj.domain.com

User my-proj-user

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

Now, I can type in

ssh my-proj-host-1234

Without the config, that would have been

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

saving a bit of typing (and typos).

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .