authorized_keys 中的选项和 sshd_config 中的选项之间的关系?

authorized_keys 中的选项和 sshd_config 中的选项之间的关系?

我想在我的一台服务器上配置 SSH 守护进程,以便远程客户端上的某些用户可以在服务器上执行某些命令。由某个公钥标识的每个用户必须能够执行特定于他的命令。

一般来说,似乎有很多选择可以做到这一点,其中三个是:

  • ForceCommand ...in sshd_config:在我的情况下这不够灵活,因为每个用户(公钥)都应该触发另一个命令。

  • command="..."in authorized_keys:这非常适合我的情况,因为每个用户authorized_keys在该服务器上的主目录中都有一个单独的文件,因此每个用户都可以执行自己的单独命令。但我对这种方法有一个理解问题,这导致我提出下面详细说明的问题。

  • 方法/usr/lib/restricted-ssh-commands:此方法对于我的用例来说有点过大,因为我的每个用户只需要执行一个命令;此外,与此方法一起使用的正则表达式必须非常仔细地设计,因为否则它们会带来安全风险。

如上所述,我想选择第二种方法。然而,在我读过的每个教程中(而且很多,例如这个)有人强调,我们不仅应该command=...authorized_keys文件中添加选项,还应该添加更多选项,如下所示:

command="/bin/foo bar baz",no-port-forwarding,no-x11-forwarding,no-agent-forwarding ssh-rsa ...

现在我担心/etc/ssh/sshd_config(我已经配置了对我系统范围内重要的所有守护进程选项)和authorized_keys文件中的选项之间的关系。

我读过man authorized_keys这给我的印象是authorized_keys优先sshd_config于两者中的选项。但是,并没有明确说明(除非我错过了)不在 中authorized_keys但在sshd_config;中的选项会发生什么情况。他们会被夺走吗sshd_config

举一个真实的例子:no-x11-forwarding是我们可以(并且应该,根据我读过的所有教程)在authorized_keys.但我已经X11Forwarding nosshd_config.那么如果我离开 会发生什么no-x11-forwardingauthorized_keys

恕我直言,必须在每个authorized_keys文件中包含所有相关选项有点愚蠢,但我遇到的每个教程都强调我们应该这样做。

如果有人能阐明这一点,我将不胜感激。

答案1

如果您使用足够新的 openssh 服务器(>= 版本7.2),然后你会得到restrict选项authorized_keys文件:

限制
启用所有限制,即禁用端口、代理和 X11 转发,以及禁用 PTY 分配和执行 ~/.ssh/rc。如果添加任何未来的限制功能authorized_keys它们将包含在该集中的文件中。

那么您可以放心,所有可能的限制都适用,并且将来仍然适用。根据需要,您可能需要在之后添加其他启用参数restrict(例如:pty用于交互式使用)。

相关内容