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


18

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

Host *.mydomain.com
    User myusername
Host host1
    Hostname host1.mydomain.com

使用这些设置,如果我输入 ssh host1.mydomain.com 它评估为 myusername@host1.mydomain.com,但如果我输入 ssh host1 它不适用我的用户设置,而是我看到 mylocalusername@host1.mydomain.com

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


如果您切换订单,将通配符部分放在第二位,该怎么办?
esmit

你试过吗?我很确定如果有的话,只会让你找到域名错误的用户名。
Mu Mind

我没有尝试过,这就是为什么我把评论答案作为尝试的东西,而不是一个不可回答的答案。
esmit

Answers:


10

只需使用:

Host *.mydomain.com host1
User myusername

Host host1
Hostname host1.mydomain.com
  • 替代模式由a中的分隔空白提供 主办 线。
  • 全部匹配 主机模式 适用。
  • 如果选项多次出现,则仅使用第一次出现

3
这至少节省了一点打字。听起来你不知道有什么方法可以避免重复域名信息?
Mu Mind

如果SSH只是尝试添加默认域,即“lan”或“mycompany.com”,而不是必须在配置文件中对其进行硬编码,那将会很棒。
Saustrup

12

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

CanonicalizeHostname yes
Host *.mydomain.com
    User myusername

Host host1
    HostName host1.mydomain.com

或者,如果您还要重新映射主机名,则可以使用 Match 代替 Host 仅匹配规范的主机名。例如,在:

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

Host host2.mydomain.com
    HostName host2.otherdomain.com

连接时不会设置用户指令 host2.mydomain.com


请注意,仍有旧版本的ssh不支持这些选项 - 如果你碰到其中一个,就像我一样,主机解决方案仍然有效。
Kyrstellaine

1

使用CanonicalDomains也可以使用。

CanonicalizeHostname yes
CanonicalDomains mydomain.com

Host *
User myusername

如果您想要特定主机的短名称,例如:

Host h
Hostname host1

但是,我不建议使用简短的名称。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.