Match Address可对特定公网IP实施运维降权,通过PermitTTY no、ForceCommand、AllowUsers等限制交互式shell、高危命令和root登录,并需置于sshd_config末尾且首匹配生效。

可以通过 sshd_config 中的 Match Address 块,结合用户、组或权限限制,对来自特定公网 IP 的 SSH 登录会话实施精细化权限控制,实现“运维降权”——即允许登录但限制其执行高危操作(如 root 权限、sudo、文件写入等)。
明确 Match Address 的作用范围
Match Address 是 OpenSSH 的条件块指令,仅对匹配该 IP(或 CIDR 段)的**后续连接会话**生效,不影响其他来源。它必须放在配置文件末尾,且其后的配置项只对该块生效,直到下一个 Match 或文件结束。
注意:
- 支持单 IP(如 203.0.113.45)、CIDR(如 203.0.113.0/24),不支持域名;
- 若客户端经 NAT 或代理(如云 WAF、跳板机),需匹配的是到达 SSH 服务器时的源 IP(即 TCP 报文中的 src_ip),不是原始用户 IP;
- 多个条件可叠加,例如 Match Address 203.0.113.45 User admin。
典型降权策略:限制 shell、禁用 sudo、禁止 root 登录
对来自指定公网 IP 的连接,可强制使用受限 shell、禁用交互式命令、移除提权能力:
-
切换为受限 shell:设置
ForceCommand或指定Shell为/bin/rbash(需提前配置 rbash 环境并限制 PATH、禁止 cd 等); -
禁用交互式终端:添加
PermitTTY no,阻止分配伪终端,使ssh user@host无法进入交互 shell,仅支持命令执行(如ssh user@host 'ls'); -
禁止 sudo 权限:不在
/etc/sudoers中为其授权;更稳妥的是在Match块中设AllowGroups ssh-readonly,再确保该组成员无 sudo 权限; -
拒绝 root 直接登录:即使用户传了
root@host,也可在Match块中加DenyUsers root或AllowUsers deploy audit显式放行非特权账号。
实用配置示例(仅对 203.0.113.45 降权)
在 /etc/ssh/sshd_config 文件末尾添加:
Match Address 203.0.113.45
PermitTTY no
ForceCommand /usr/local/bin/audit-shell
AllowUsers deploy audit
X11Forwarding no
AllowTcpForwarding no
GatewayPorts no
说明:
- audit-shell 是一个自定义轻量 shell(可用 Python/Go 编写),只允许预设安全命令(如 tail -n 50 /var/log/nginx/access.log、systemctl status nginx),拒绝 rm、cp、bash 等;
- AllowUsers 确保只有运维审计类账号能从此 IP 登录;
- 关闭转发类选项,防止该连接被用作代理或隧道。
验证与注意事项
配置后务必:
- 运行 sudo sshd -t 检查语法;
- 用 sudo systemctl reload sshd 重载(不要 restart,避免断连);
- 从目标 IP 实际测试(勿用本地 127.0.0.1 或内网地址);
- 查看 /var/log/auth.log 中是否出现 matched 'Address' condition 日志;
- 避免把管理员常用 IP 写错导致锁死——建议先配宽松策略(如只 PermitTTY no),再逐步收紧。










