Jaka jest różnica między Hostem a HostName w SSH Config?

23

Strona podręcznika mówi:

Gospodarz

Host Ogranicza następujące deklaracje (do następnego słowa kluczowego Host) tylko dla tych hostów, które pasują do jednego ze wzorów podanych po słowie kluczowym. Jeśli podano więcej niż jeden wzór, należy je oddzielić białymi spacjami. Pojedynczego `* 'jako wzorca można użyć do zapewnienia globalnych ustawień domyślnych dla wszystkich hostów. Host to argument nazwy hosta podany w wierszu poleceń (tzn. Nazwa nie jest konwertowana na kanoniczną nazwę hosta przed dopasowaniem).

Wpis wzorca można negować, poprzedzając go wykrzyknikiem (`! '). W przypadku dopasowania zanegowanego wpisu wpis Host jest ignorowany, niezależnie od tego, czy pasują do niego inne wzorce. Negowane dopasowania są zatem przydatne do zapewnienia wyjątków dla dopasowań symboli wieloznacznych.>

Zobacz WZORY, aby uzyskać więcej informacji o wzorach.

Nazwa_hosta

Nazwa hosta Określa prawdziwą nazwę hosta, na który należy się zalogować. Można to wykorzystać do określenia pseudonimów lub skrótów dla hostów. Jeśli nazwa hosta zawiera sekwencję znaków `% h ', zostanie ona zastąpiona nazwą hosta określoną w wierszu poleceń (jest to przydatne do manipulowania niekwalifikowanymi nazwami). Domyślnie jest to nazwa podana w wierszu poleceń. Dozwolone są również numeryczne adresy IP (zarówno w wierszu polecenia, jak iw specyfikacjach HostName).

Na przykład, gdy chcę utworzyć konfigurację SSH dla GitHub, czym powinny być odpowiednio Host i nazwa_hosta?

TheFooProgrammer
źródło
3
Zasadniczo: Hostjest ciągiem, który użytkownik podaje jako dane wejściowe do CLI podczas wywoływania SSH; HostNameJest to ciąg znaków, który klient SSH Wyjście przez sieć, gdy próbuje połączyć się z serwerem.
sampablokuper

Odpowiedzi:

15

W przypadku github.com ~/.ssh/configmoże to wyglądać tak

Host github.com
    IdentityFile ~/.ssh/key_name_for_github

Dla nazwy hosta: jak mówi mężczyzna, pozwala określić skrót nazwy hosta. Na przykład, jeśli ~/.ssh/configtak wyglądasz

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

Następnie podczas pisania

  • ssh host1faktycznie logujesz się na host1.przyklad.com
  • ssh host2zaloguj się do anotherdomain.com
int
źródło
Zgaduję, że miałeś na myśli „Hostname” zamiast „Host” w drugim ~/.ssh/configprzykładzie?
Dave
6

W prostym użyciu:

Host to rzeczywista nazwa hosta i nie ma HostName

LUB

Hostto pseudonim hosta i HostNamerzeczywista nazwa hosta.

Prosty przykład:

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

Uwaga: strona podręcznika jest poprawna technicznie, jest nieco dziwnie sformułowana. Dodam jeszcze kilka słów dla jasności:HostName Specifies the real host name to log into. This can be used *TOGETHER WITH 'HOST'* to specify nicknames or abbreviations for hosts.

mblakesley
źródło
1

Ostatnio chciałem zrobić coś z hostem i nazwą hosta, ale zapomniałem o dokładnej składni ... ale przeglądanie tego było bałaganem, a strona podręcznika nie była zbyt pomocna. Więc zakładając, że są inni, którzy mają taką samą potrzebę, oto moje ciekawostki.

Host określa argument wiersza poleceń i można go traktować jako a) rzeczywistą nazwę hosta / adres IP, b) skrót, c) alias. Nazwa hosta to prawdziwa nazwa hosta / adres IP komputera, z którym się łączysz. W polu HostName można użyć% h jako ciągu nazwy hosta określonego w wierszu polecenia. (To była część, której chciałem użyć w moim przykładzie.)

Załóżmy, że masz zestaw hostów, w których nazwa hosta zaczyna się od my-proj-host -... i wszystkie są w domenie .my.proj.domain.com, i muszę się do nich zalogować, używając określonego klucza ssh my-proj-id-rsa i określony identyfikator użytkownika my-proj-user. Aby ułatwić mi życie, dodałbym następujące pliki do pliku ~ / .ssh / config

Host my-proj-host *

HostName% h.my.proj.domain.com

Użytkownik my-proj-user

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

Teraz mogę pisać

ssh my-proj-host-1234

Bez konfiguracji byłoby to możliwe

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

oszczędzając trochę pisania (i literówek).

Marcus Yoo
źródło