扩展主机名上的 SSH 配置通配符

Mu *_*ind 36 ssh

我想在我的 SSH 配置中有一个通配符,以将我的默认用户名设置为特定域上所有主机的特定值。但我也想为某些特定主机提供一些短名称。我希望这样的事情可以工作:

Host *.mydomain.com
    User myusername
Host host1
    Hostname host1.mydomain.com
Run Code Online (Sandbox Code Playgroud)

使用这些设置,如果我输入ssh host1.mydomain.com它的计算结果为myusername@host1.mydomain.com,但如果我输入ssh host1它不会应用我的用户设置,而是看到mylocalusername@host1.mydomain.com.

有没有办法让通配符匹配最终扩展的主机名,以便我可以输入短格式或长格式并获得相同的结果?

小智 24

您可以简单地设置CanonicalizeHostnameyes使用别名的规范主机名重新解析 ssh_config。例如:

CanonicalizeHostname yes
Host *.mydomain.com
    User myusername

Host host1
    HostName host1.mydomain.com
Run Code Online (Sandbox Code Playgroud)

或者,如果您还想重新映射主机名,则可以使用Match而不是Host仅匹配规范主机名。例如,在:

Match canonical host="*.mydomain.com"
    User myusername

Host host2.mydomain.com
    HostName host2.otherdomain.com
Run Code Online (Sandbox Code Playgroud)

当您连接到host2.mydomain.com.


小智 21

只需使用:

Host *.mydomain.com host1
User myusername

Host host1
Hostname host1.mydomain.com
Run Code Online (Sandbox Code Playgroud)
  • 替代模式由主机行中的分隔空白提供。
  • 应用所有匹配的主机模式
  • 如果一个选项出现多次,则只使用第一次出现

  • 这至少可以节省一点打字时间。听起来您不知道有什么方法可以避免复制域信息? (3认同)

小智 6

您可以在 .ssh/config 中使用 %h.mydomain.com。


 Host host?
 User myusername
 Hostname %h.mydomain.com

Host host?? User myusername Hostname %h.mydomain.com

Host host??? User myusername Hostname %h.mydomain.com

Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

SSH 主机 1
代替
ssh host1.mydomain.com
SSH 主机 10
代替
ssh host10.mydomain.com
和 SSH 主机 100

问候, 伯特