我有几台运行 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