SSH 配置中的 Host 和 HostName 有什麼不同?

SSH 配置中的 Host 和 HostName 有什麼不同?

手冊頁是這樣說​​的:

主持人

Host 將以下聲明(直到下一個 Host 關鍵字)限制為僅適用於與關鍵字後給定的模式之一相符的主機。如果提供了多個模式,則應使用空格分隔它們。單一“*”作為模式可用於為所有主機提供全域預設值。主機是命令列上給出的主機名稱參數(即在匹配之前名稱不會轉換為規範化主機名稱)。

可以透過在模式條目前加上感嘆號(`!')來否定模式條目。如果符合否定條目,則忽略主機條目,無論該行上的任何其他模式是否符合。因此,否定匹配對於提供通配符匹配的例外很有用。

有關模式的更多信息,請參閱模式。

主機名稱

HostName 指定要登入的真實主機名稱。這可用於指定主機的暱稱或縮寫。如果主機名稱包含字元序列“%h”,那麼它將被替換為命令列上指定的主機名稱(這對於操作非限定名稱很有用)。預設名稱是命令列上給出的名稱。數字 IP 位址也是允許的(在命令列和主機名稱規範中)。

例如,當我想為 GitHub 建立 SSH 配置時,Host 和 HostName 應該分別是什麼?

答案1

對於 github.com 你~/.ssh/config可能看起來像這樣

Host github.com
    IdentityFile ~/.ssh/key_name_for_github

對於主機名稱:正如 man 所說,它允許您指定主機的縮寫。例如,如果你~/.ssh/config看起來像這樣

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

然後當你輸入

  • ssh host1你實際上登入主機1.example.com
  • ssh host2登入anotherdomain.com

答案2

簡單用法:

Host是實際的主機名稱且沒有HostName

或者

Host是主機的暱稱,HostName是實際的主機名稱。

簡單的例子:

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

注意:手冊頁在技術上是正確的,只是措詞有點奇怪。為了清楚起見,我想再補充幾句話:HostName Specifies the real host name to log into. This can be used *TOGETHER WITH 'HOST'* to specify nicknames or abbreviations for hosts.

答案3

我最近想用主機和主機名稱做一些事情,但忘記了確切的語法......但谷歌搜尋它是一團糟,手冊頁也沒有太大幫助。因此,假設有其他人有相同的需求,以下是我的花絮。

Host 指定命令列參數,可以被認為是 a) 實際主機名稱/IP,b) 簡寫,c) 別名。 HostName 是您要連接的機器的真實主機名稱/IP。在 HostName 欄位中,您可以使用 %h 作為在命令列上指定的主機名稱字串。 (這是我想在範例中使用的部分。)

因此,假設您有一組主機,其中主機名稱以 my-proj-host-... 開頭,並且它們都位於網域 .my.proj.domain.com 中,我需要使用特定的 ssh 金鑰登入它們my -proj-id-rsa 和特定使用者ID my-proj-user。為了讓我的生活更輕鬆,我將以下內容添加到 ~/.ssh/config 檔案中

託管我的專案主機*

主機名稱 %h.my.proj.domain.com

使用者 my-proj-user

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

現在,我可以輸入

ssh my-proj-host-1234

如果沒有配置,那就是

ssh -i ~/.ssh/my-proj-id-rsa[電子郵件受保護]

節省一些打字(和打字錯誤)。

相關內容