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

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

以下条目/etc/ssh/sshd_config非常有效:

Match User andreas
    ForceCommand /bin/echo "You are Andreas"

andreas但是,如果我尝试用负匹配替换它,它根本无法吸引用户:

Match User !bob
    ForceCommand /bin/echo "You are not Bob"

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

根据手册页,负面模式应该起作用:

的参数Match是一个或多个条件模式对,或匹配所有条件的单个标记 All。可用的条件是UserGroupHostLocalAddressLocalPortAddress。匹配模式可以由单个条目或逗号分隔的列表组成,并且可以使用图案的部分ssh_config(5)

答案1

我发现此相关帖子关于服务器故障

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

Match User *,!bob
    ForceCommand /bin/echo "You are not Bob"

引用红帽

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

Match Group *,!admin Address 192.168.1.1
    ForceCommand /bin/false

这将拒绝来自192.168.1.1对于任何不在行政组。使用语句来拒绝连接,ForceCommand该语句指示 sshd 服务器运行虚拟命令 ( /bin/false) 并立即退出。

根本原因

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

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

答案2

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

参见这些错误:

相关内容