我想在我的一台服务器上配置 SSH 守护进程,以便远程客户端上的某些用户可以在服务器上执行某些命令。由某个公钥标识的每个用户必须能够执行特定于他的命令。
一般来说,似乎有很多选择可以做到这一点,其中三个是:
ForceCommand ...
insshd_config
:在我的情况下这不够灵活,因为每个用户(公钥)都应该触发另一个命令。command="..."
inauthorized_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 no
在sshd_config
.那么如果我离开 会发生什么no-x11-forwarding
呢authorized_keys
?
恕我直言,必须在每个authorized_keys
文件中包含所有相关选项有点愚蠢,但我遇到的每个教程都强调我们应该这样做。
如果有人能阐明这一点,我将不胜感激。
答案1
如果您使用足够新的 openssh 服务器(>= 版本7.2),然后你会得到restrict
选项authorized_keys
文件:
限制
启用所有限制,即禁用端口、代理和 X11 转发,以及禁用 PTY 分配和执行~/.ssh/rc
。如果添加任何未来的限制功能authorized_keys
它们将包含在该集中的文件中。
那么您可以放心,所有可能的限制都适用,并且将来仍然适用。根据需要,您可能需要在之后添加其他启用参数restrict
(例如:pty
用于交互式使用)。