Debian:SSH:“PermitRootLogin=forced-commands-only”停止工作

Bre*_*nt 5 linux debian ssh

我有几台运行 Debian Lenny 的服务器。

就在最近,我发现了ssh的PermitRootLogin=forced-commands-only指令,它允许我使用 ssl 密钥以 root 身份运行脚本化 rsync,而无需启用更通用的 root ssh 访问。

然而,上周这停止工作 - 它出现在我的所有服务器上 - 我不知道为什么。

使用PermitRootLogin=yes一切正常,但我更愿意阻止 root 登录 - 特别是通过密码。

在它停止工作的那天,我们重新配置了其中一台交换机上的一些端口(我们后来恢复了它),但我看不出这会影响它,因为它仍然可以在将 PermitRootLogin 设置为 yes 的情况下工作。

我如何诊断强制命令指令显然停止工作的原因?

rkt*_*hkr 10

“PermitRootLogin 强制命令仅”要求所有连接,以 root 身份通过 SSH,需要使用公钥身份验证,并且命令与该密钥相关联(如“validate-rsync”)。

如果您想以 root 身份登录但只能使用密钥,请使用:

PermitRootLogin = without-password
Run Code Online (Sandbox Code Playgroud)

要将 rsync 限制为定义的 ssh-key,您可以在您的 authorized_keys 中指定:

from="<ip>",command="/usr/local/sbin/validate-rsync" ssh-dss AAAAZ5Hbl......
Run Code Online (Sandbox Code Playgroud)

并将这个包装器保存到:/usr/local/sbin/validate-rsync

#!/bin/sh 

case "$SSH_ORIGINAL_COMMAND" in 
*\&*) 
echo "Rejected" 
;; 
*\(*) 
echo "Rejected" 
;; 
*\{*) 
echo "Rejected" 
;; 
*\;*) 
echo "Rejected" 
;; 
*\<*) 
echo "Rejected" 
;; 
*\`*) 
echo "Rejected" 
;; 
*\|*) 
echo "Rejected" 
;; 
rsync\ --server*) 
$SSH_ORIGINAL_COMMAND 
;; 
*) 
echo "Rejected" 
;; 
esac 
Run Code Online (Sandbox Code Playgroud)

rsync 附带了一个稍微复杂的脚本来执行相同的操作, http://www.samba.org/ftp/unpacked/rsync/support/rrsync