Qual é a diferença entre Host e HostName no SSH Config?

23

A página do manual diz o seguinte:

Hospedeiro

Host Restringe as seguintes declarações (até a próxima palavra-chave Host) apenas para aqueles hosts que correspondem a um dos padrões fornecidos após a palavra-chave. Se mais de um padrão for fornecido, eles deverão ser separados por espaços em branco. Um único `* 'como padrão pode ser usado para fornecer padrões globais para todos os hosts. O host é o argumento do nome do host fornecido na linha de comando (ou seja, o nome não é convertido em um nome de host canônico antes da correspondência).

Uma entrada de padrão pode ser negada prefixando-a com um ponto de exclamação (`! '). Se uma entrada negada for correspondida, a entrada Host será ignorada, independentemente de outros padrões na linha corresponderem. Portanto, correspondências negadas são úteis para fornecer exceções para correspondências curinga.

Veja PADRÕES para mais informações sobre padrões.

Nome de anfitrião

HostName Especifica o nome do host real no qual efetuar login. Isso pode ser usado para especificar apelidos ou abreviações para hosts. Se o nome do host contiver a sequência de caracteres `% h ', isso será substituído pelo nome do host especificado na linha de comando (isso é útil para manipular nomes não qualificados). O padrão é o nome fornecido na linha de comando. Endereços IP numéricos também são permitidos (na linha de comando e nas especificações HostName).

Por exemplo, quando eu quero criar uma configuração SSH para o GitHub, o que Host e HostName devem ser respectivamente?

TheFooProgrammer
fonte
3
Em essência: Hosté a string que o usuário fornece como entrada na CLI ao invocar o SSH; HostNameé a string que a vontade cliente SSH saída através da rede ao tentar se conectar ao servidor.
Sampablokuper

Respostas:

15

Para o github.com, você ~/.ssh/configpode se parecer com isso

Host github.com
    IdentityFile ~/.ssh/key_name_for_github

Para hostname: como o homem diz, permite especificar a abreviação de host. Por exemplo, se você se ~/.ssh/configparece com isso

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

Então quando você digita

  • ssh host1você efetua login no host1.example.com
  • ssh host2faça login em outro domínio.com
int
fonte
Suponho que você quis dizer 'Hostname' em vez de 'Host' no seu segundo ~/.ssh/configexemplo?
22416 Dave Dave
6

Em uso simples:

Host é o nome do host real e não há HostName

OU

Hosté o apelido do host e HostNameé o nome do host real.

Exemplo simples:

$ 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: A página de manual está tecnicamente correta, apenas redigida um pouco estranhamente. Eu acrescentaria mais algumas palavras para maior clareza:HostName Specifies the real host name to log into. This can be used *TOGETHER WITH 'HOST'* to specify nicknames or abbreviations for hosts.

mblakesley
fonte
1

Recentemente, eu queria fazer algo com o host e o nome do host, mas esqueci a sintaxe exata ... mas pesquisar no Google era uma bagunça e a página de manual não era muito útil. Então, supondo que existam outros que tenham a mesma necessidade, aqui estão meus petiscos.

Host especifica o argumento da linha de comando e pode ser considerado como a) nome real do host / IP, b) abreviação, c) alias. O HostName é o nome do host / IP real da máquina à qual você está se conectando. No campo HostName, você pode usar% h como a cadeia de nome do host especificada na linha de comando. (Essa foi a parte que eu queria usar no meu exemplo.)

Então, digamos que você tenha um conjunto de hosts em que o nome do host comece com my-proj-host -... e todos eles estejam no domínio .my.proj.domain.com, e eu preciso fazer login usando a chave ssh específica my-proj-id-rsa e ID do usuário específico my-proj-user. Para facilitar minha vida, eu adicionaria o seguinte ao arquivo ~ / .ssh / config

Hospede meu-proj-host *

HostName% h.my.proj.domain.com

Usuário my-proj-user

Arquivo de identidade ~ / .ssh / my-proj-id-rsa

Agora, eu posso digitar

ssh my-proj-host-1234

Sem a configuração, isso teria sido

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

economizando um pouco de digitação (e erros de digitação).

Marcus Yoo
fonte