ssh通配配置~/.ssh/config

~/.ssh/config 本身不支持 CIDR(如 172.30.96.0/24)这种网段写法。OpenSSH 的 Host 字段只是一个 模式匹配器(pattern matcher),不是网络地址解析器。所以它只能用:

  • 通配符 *
  • 单字符 ?
  • 明确主机名

可以用 通配模式来模拟一个网段


1.使用通配符匹配 172.30.96.*

1
2
3
4
Host 172.30.96.*
User root
Port 22
IdentityFile ~/.ssh/96-6

然后你可以直接:

1
2
ssh 172.30.96.14
ssh 172.30.96.25

都会自动使用这个 key。


2.给网段定义一个 alias 规则

可以用 Host + %h

1
2
3
4
5
Host 96-*
HostName 172.30.96.%h
User root
Port 22
IdentityFile ~/.ssh/96-6

连接方式:

1
2
ssh 96-14
ssh 96-23

%h 会被替换为 Host 中的后缀

不过 %h 是整个 host,所以更常见写法是:

1
2
3
4
Host 96-*
User root
Port 22
IdentityFile ~/.ssh/96-6

然后 /etc/hosts

172.30.96.14 96-14
172.30.96.23 96-23

3.ProxyJump + 动态解析

如果你经常管理整个网段,可以写:

1
2
3
Host 172.30.96.*
User root
IdentityFile ~/.ssh/96-6

然后:

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
2
3
4
5
6
Host 172.30.96.*
User root
Port 22
IdentityFile ~/.ssh/96-6
ServerAliveInterval 60
StrictHostKeyChecking no

这样整个 172.30.96/24 网段统一策略


有个有趣的小细节:
ssh_config 的 pattern 系统其实比大多数人想象的强,它支持 多 pattern + 排除规则,甚至可以这样:

1
Host 172.30.96.* !172.30.96.10