有沒有辦法在不修改 etc/hosts 文件的情況下使用主機名別名進行 ssh?
我花了幾個小時研究如何使 100 台主機自動化,這些主機都在一個本地域下。(我在 ubuntu linux 17.04 機器上)
比如我有node1.domain.org,node2.domain.org,列表去node100.domain.org
實際上不可能編輯 /etc/hosts 文件手動添加所有別名。
例如,
127.0.0.1 本地主機
127.0.1.1 哈里什
手動添加主機名別名
10.2.1.3 node1.domain.org node1
以下行對於支持 IPv6 的主機是可取的
::1 ip6-localhost ip6-loopback
fe00 :: 0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
我試過了
ip route | grep default
,發現網關是 10.1.10.1 但不知道我是否應該在這個網關上或從這裡開始的任何進一步的步驟。我嘗試
cat /etc/resolv.conf
並找到了我正在使用的 DNS 伺服器貓 /etc/resolv.conf
由 resolvconf(8) 生成的 glibc 解析器 (3) 的動態 resolv.conf(5) 文件
不要手動編輯此文件 - 您的更改將被覆蓋 127.0.0.53 是 systemd-resolved 存根解析器。執行“systemd-resolve –status”以查看有關實際名稱伺服器的詳細資訊。
名稱伺服器 10.2.254.254 名稱伺服器 8.8.8.8 名稱伺服器 127.0.0.53
搜尋 domain.com
我找到了所有節點都在使用的 DNS
xcat node1 dns
伺服器:10.2.254.254#53(10.2.254.254)
遠端節點 dns 和我的本地機器 dns 都匹配。
但是,不知道為什麼它是 resolve.conf 文件中的 domain.com 而不是 domain.org,因為所有節點都在 domain.org 而不是 domain.com 下(但它告訴它在我嘗試編輯它時會覆蓋它並且確實如此. 我嘗試在將其更新到 domain.org 並覆蓋文件後執行“sudo /etc/init.d/networking restart”或“sudo service network-manager restart”)。我觀察到可以使用所有別名進行 SSH,例如在我進行此更改時
node1
不使用node1.domain.org
,但文件總是在系統重新啟動時或當我繼續使用 wifi 連接而不是乙太網連接時被覆蓋。我也試過驗證
route
命令,一切看起來都很正常,仍然沒有線索路線
核心IP路由表
目標網關 Genmask 標誌 Metric Ref Use Iface
預設網關 0.0.0.0 UG 100 0 0 enp2s0f1
10.1.10.0 0.0.0.0 255.255.255.0 U 100 0 0 enp2s0f1
連結本地 0.0.0.0 255.255.0.0 U 1000 0 0 enp2s0f1
我想要的只是 ssh node1 而不是 ssh node1.domain.org 或 ssh node50 而不是 ssh node50.domain.org 或使用其別名在任何節點中執行 ssh 而無需手動將其添加到 /etc/hosts。我只是想找到一種可靠的方法來做到這一點。
是的,使用 ~/.ssh/config
Host bsd1 Hostname 10.9.9.2 User bsduser Port 2243 Host web-backup Hostname www-backup.example.com User dauser Port 2229
基本上,在每個 Host 語句之後,您幾乎可以使用在系統級 ssh_config 中有效的任何選項
然後只需 ssh 到您必須做的主機的任何標籤 -
user@darkstar:~/ $ ssh web-backup dauser@www-backup.example.com's password:
老實說,這是毫不費力的。
在
~/.ssh/config
:Host node* server* Hostname %h.domain.org
現在每個“節點”和“伺服器”都映射到域。
$ ssh node04
–>$ ssh node04.domain.org
$ ssh server12
–>$ ssh server12.domain.org