我想在我的一台服务器上配置一个 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
文件中包含所有相关选项有点愚蠢,但我遇到的每个教程再次强调我们应该这样做。
如果有人能对此有所了解,我将不胜感激。
如果您使用足够新的 openssh 服务器(>= 版本7.2),那么您将
restrict
在authorized_keys
文件中获得选项:那么您可以放心,所有可能的限制都适用,并且将来仍然适用。根据需要,您可能必须在之后添加其他启用参数
restrict
(例如:pty
用于交互使用)。