我需要在工作中登入多個伺服器才能完成工作。我厭倦了輸入要存取的伺服器的 FQDN。我正在我們自己的專用網路上透過 ssh 登入/登出。我 99% 確定它在我們自己的專用網路上,b/c 所有伺服器都有 ip addr 10.xyz 有沒有辦法只使用主機名稱而不是網域名稱來 ssh 到伺服器?
我們在多個國家設有伺服器。我們的伺服器的命名方式很長。其命名如下:
hostname.country.domainname.com
我正在輸入腕管
ssh [email protected]
……每次我造訪我們的一台伺服器時。如果我在美國並且嘗試存取位於美國的另一台主機,我只需輸入即可ssh me@hostname2正常連線。但是,如果我在美國並嘗試連接到英國的伺服器,我將無法鍵入並連接到.ssh [email protected]hostname3
我所做的解決方法是在 ~/.ssh/config 檔案中為某些伺服器設定一個別名。但是,我認為將 1000 多個伺服器添加到該文件中是不可行的。我已經添加了 20 多台伺服器,我的同事認為我瘋了,儘管我認為他們在 ssh 周圍輸入 FQDN 很瘋狂。
有沒有一種簡單的方法可以讓我們設定一些東西,這樣我們就不必每次都輸入我們的domainname.com?
答案1
%h您可以在組態中使用通配符
例如
Host *.eng
Hostname %h.domainname.com
現在,當您這樣做時,ssh foo.eng它將嘗試連接到foo.eng.domainname.com.
您也可以向此配置新增其他選項;例如強制使用者名稱
Host *.eng
Hostname %h.domainname.com
User me
現在,當您這樣做時,它將嘗試以用戶身份ssh foo.eng連接。foo.eng.domainname.comme
% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known
(好吧,很明顯,在它對我來說不是有效的主機名稱之前我收到了一個錯誤!)
所以現在每個國家只需要一條規則。
答案2
您可以CanonicalDomains在 ssh 配置中使用該選項。
將以下內容新增至 ssh 設定檔將使 ssh 嘗試附加domainname.com到名稱中最多包含 1 個點的任何主機:
CanonicalizeHostname yes
CanonicalDomains domainname.com
使用此配置ssh foo.eng將首先嘗試,如果找不到主機則foo.eng.domainname.com回退。foo.eng同樣,ssh github.com將首先嘗試github.com.domainname.com,因此如果您想連接到 GitHub,您的 DNS 伺服器不應傳回不存在主機的記錄。
可以CanonicalizeMaxDots用來控制在 ssh 認為主機名稱完全限定且不附加 之前可以在主機名稱中出現多少個點domainname.com。它預設為 1,考慮到您目前擁有的方案,這對您來說應該足夠了,但如果您遇到類似的情況,hostname.city.country則需要增加它。
答案3
如果你添加
search domainname.com
到/etc/resolv.conf,並使用hostname.country,ssh(以及其他網絡程序,就此而言)將自動domainname.com為您附加1。
我認為將不同國家/地區的網域添加到您的search路徑中不是一個好主意,因為如果兩個不同國家/地區的兩台伺服器共享相同的主機名,您可能會出現意外行為2
我相信這種方法比更改配置更好,因為無論您使用什麼程式(VNC,...),ssh這都可以解決。hostname.countrytelnet
1domainname.com更準確地說,如果無法hostname.country自行解析,則會追加。
2在這種情況下,hostname將解析為路徑中首先列出網域的國家/地區的伺服器search。


