为什么我的否定匹配不起作用?

IQA*_*eas 4 ssh openssh

以下条目/etc/ssh/sshd_config就像一个魅力:

Match User andreas
    ForceCommand /bin/echo "You are Andreas"
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试用否定匹配替换它,它根本不会捕获用户andreas

Match User !bob
    ForceCommand /bin/echo "You are not Bob"
Run Code Online (Sandbox Code Playgroud)

没有错误消息或任何东西,它只是继续,就好像从未设置过配置选项一样。

根据手册页,否定模式应该有效:

的参数Match是一个或多个标准模式对或匹配所有标准的单个标记 All 。可用条件包括UserGroupHostLocalAddressLocalPort,和Address。匹配模式可以由单个条目或逗号分隔的列表组成,并且可以使用 的PATTERNS部分中描述的通配符和否定运算符ssh_config(5)

buf*_*ufh 5

在服务器故障上找到了这个相关的帖子

这是一种奇怪的行为,但您可以尝试:

Match User *,!bob
    ForceCommand /bin/echo "You are not Bob"
Run Code Online (Sandbox Code Playgroud)

引用红帽

要在 Match 条件块中使用否定,表达式前面需要有一个*。例如,给出以下部分的底部sshd_config:Raw

Match Group *,!admin Address 192.168.1.1
    ForceCommand /bin/false
Run Code Online (Sandbox Code Playgroud)

这将拒绝从192.168.1.1连接到不在admin组中的任何人。连接拒绝是使用ForceCommand指示 sshd 服务器运行虚拟命令 ( /bin/false) 并立即退出的语句来实现的。

根本原因

这种非直观行为的原因取决于 OpenSSH 中否定的实现。

参考 https://bugzilla.mindrot.org/show_bug.cgi?id=1315


Jak*_*uje 2

不幸的是,负匹配被破坏了,希望在 openssh-7.0 中得到修复:

查看这些错误: