我的 DNS 搜索域中有 test.example.com。当我 时ssh server01
,它会按预期连接到我的服务器。但是它不遵循我的 ssh_config 规则,因为它不匹配:
Host *.test.example.com
User djimenez
ForwardAgent yes
没问题,我会添加一张外卡!
Host *
User djimenez
ForwardAgent yes
但是,这适用于每个主机。不仅限于短 DNS 名称(非 FQDN,如果您愿意的话)。
我的问题是,有没有办法创建仅匹配短 DNS 名称的主机规则?或者更好的是,如果有某种神奇的方法让 ssh 从 DNS 获取 FQDN(如果我有多个搜索域)。
答案1
允许使用的唯一两个通配符主持人规范是*
匹配任何字符串,以及?
匹配任何单个字符。您还可以将!
模式添加到前面以否定匹配的含义,以便它适用于与模式其余部分不匹配的主机值。
因此,像这样的规则:
Host !*.*
SomeOption...
应适用于任何不包含句点的主机名值。
您还可以为每个模式设置多个模式主持人行,以防您希望规则应用于主机名的长格式:
Host !*.* *.test.example.com
SomeOption...
答案2
手册页ssh_config
指出:“主机是命令行上给出的主机名参数(即,在匹配之前,该名称不会转换为规范化的主机名)。”
解决这个问题的方法是创建一个包装脚本,首先将你提供的主机名扩展为 FQDN(如果可能),然后将其传递给 ssh,例如https://serverfault.com/questions/567272/expand-hostnames-to-fqdn-before-calling-ssh