Debian:SSH:“PermitRootLogin =仅强制命令”停止工作

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

就在最近,我发现了PermitRootLogin =仅用于强制命令的 ssh指令,允许我使用ssl密钥以root身份运行脚本化的rsync,而不启用更广义的root ssh访问。

然而,上周这个停止工作 – 它出现在我所有的服务器上 – 我不明白为什么。

PermitRootLogin = yes仍然可以正常工作,但我宁愿阻止rootlogin – 特别是通过密码。

在它停止工作的那一天,我们重新configuration了其中一个交换机上的一些端口(我们稍后恢复),但是我看不到影响这个,因为它仍然与PermitRootLogin设置为是一起使用。

我怎样才能诊断为什么只有强制命令的指令显然停止工作?

“PermitRootLogin forced-commands-only”要求所有连接(通过SSH作为根用户)需要使用公共密钥authentication,并且命令与该密钥相关联(如“validate-rsync”)。

如果你想以root用户身份login,只能使用键值:

PermitRootLogin = without-password 

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

 from="<ip>",command="/usr/local/sbin/validate-rsync" ssh-dss AAAAZ5Hbl...... 

并保存这个包装:/ 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 

rsync附带的稍微更复杂的脚本也可以这样做, http://www.samba.org/ftp/unpacked/rsync/support/rrsync

如果rsync可以以root身份login,那么任何人都可以:服务器没有什么区别。 我相信这不是实验性的/哈克式的,就是只是意识到它不是比“是”更安全。

我build议你禁用根密码authentication(例如,根本不需要密码,在需要时使用sudo ),并依赖于密钥authentication方法。