ssh通配配置~/.ssh/config
~/.ssh/config 本身不支持 CIDR(如 172.30.96.0/24)这种网段写法。OpenSSH 的 Host 字段只是一个 模式匹配器(pattern matcher),不是网络地址解析器。所以它只能用:
- 通配符
* - 单字符
? - 明确主机名
可以用 通配模式来模拟一个网段。
1.使用通配符匹配 172.30.96.*
1 | Host 172.30.96.* |
然后你可以直接:
1 | ssh 172.30.96.14 |
都会自动使用这个 key。
2.给网段定义一个 alias 规则
可以用 Host + %h:
1 | Host 96-* |
连接方式:
1 | ssh 96-14 |
%h 会被替换为 Host 中的后缀。
不过 %h 是整个 host,所以更常见写法是:
1 | Host 96-* |
然后 /etc/hosts:
172.30.96.14 96-14
172.30.96.23 96-23
3.ProxyJump + 动态解析
如果你经常管理整个网段,可以写:
1 | Host 172.30.96.* |
然后:
ssh 172.30.96.14
自动匹配。
4.SSH Config 匹配逻辑
OpenSSH 读取 config 时:
从上到下匹配 Host pattern
匹配到的配置叠加
最后一个优先级最高+++
逻辑大致像这样:
flowchart TD
A[ssh 172.30.96.14] --> B[读取 ~/.ssh/config]
B --> C[匹配 Host pattern]
C --> D{匹配 172.30.96.*}
D -->|Yes| E[应用 User root]
E --> F[应用 IdentityFile ~/.ssh/96-6]
F --> G[建立 SSH 连接]
推荐.ssh/config写法
1 | Host 172.30.96.* |
这样整个 172.30.96/24 网段统一策略。
有个有趣的小细节:ssh_config 的 pattern 系统其实比大多数人想象的强,它支持 多 pattern + 排除规则,甚至可以这样:
1 | Host 172.30.96.* !172.30.96.10 |