手冊頁是這樣說的:
主持人
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.comssh 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[電子郵件受保護]
節省一些打字(和打字錯誤)。