Ssh

ssh 配置中的正則表達式匹配

  • November 25, 2020

我有一堆名稱為 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.comdc1這避免了對頂級域的根伺服器的無用請求。

2.) 或 AAAA 記錄。

2020 年 11 月 25 日更新的答案:

雖然上面過時的答案仍然是一個完全有效的答案,但如今,我寧願建議使用ssh_config內置機制CanonicalDomains

這意味著,/etc/resolv.conf您可以簡單地將以下行添加到ssh_config文件頂部,而不是更改或 DNS 記錄:

CanonicalizeHostname yes
CanonicalDomains domain.com

有關這些配置語句的詳細資訊,請參閱官方 ssh_config 文件

引用自:https://serverfault.com/questions/363055