ssh 配置中的正則表達式匹配
我有一堆名稱為 srv1.domain.com、srv2.domain.com、…、srv50.domain.com 的伺服器
我希望能夠通過以下方式連接到這些伺服器
ssh srv1
我不想將 50 個配置條目放入我的 .ssh/config 中,例如
HOST srv1 HOSTNAME srv1.domain.com USER amac IdentityFile /home/amac/.ssh/id_rsa
我喜歡的是正則表達式匹配,它可以讓我寫類似的東西
HOSTNAME (srv[0-9]*).domain.com HOST \1 USER amac IdentityFile /home/amac/.ssh/id_rsa
這可能嗎?也許通過創建一個 bash 別名,它將“srv(.*)”的所有實例轉換為 srv\1.domain.com,其中 \1 對應於正則表達式匹配的括號中的子字元串?
謝謝。
這聽起來像是 DNS 最能解決的問題。將此添加到您的
/etc/resolv.conf
:search domain.com
如果 DNS 查找不包含點1或返回 NXDOMAIN >response,則將使用該搜尋值 >append 進行另一個 DNS 查找。
例子:
如果你這樣做
ssh srv1
了,DNS 查找將會進行srv1.domain.com
。如果您這樣做
ssh srv1.dc1
,DNS 查找srv1.dc1
將返回 NXDOMAIN。自動後續 DNS 查找將針對srv1.dc1.domain.com
.您可以將多個搜尋域添加到由空格分隔的行中,它們將按列出的順序進行嘗試,直到其中一個返回 A 記錄2。
1.) 此值是可配置的,指的是短名稱必須少於的點數。預設值為 1,對於主機格式為 的站點,該值應設置為高於 1
srv1.dc1.domain.com
。dc1
這避免了對頂級域的根伺服器的無用請求。2.) 或 AAAA 記錄。
2020 年 11 月 25 日更新的答案:
雖然上面過時的答案仍然是一個完全有效的答案,但如今,我寧願建議使用
ssh_config
內置機制CanonicalDomains
這意味著,
/etc/resolv.conf
您可以簡單地將以下行添加到ssh_config
文件頂部,而不是更改或 DNS 記錄:CanonicalizeHostname yes CanonicalDomains domain.com
有關這些配置語句的詳細資訊,請參閱官方 ssh_config 文件。