SSHD配置检查bash脚本

SSHD配置检查bash脚本

问题描述:

我目前正在做一个简单的安全审计脚本,它将打印每个配置不匹配的OK /错误。 情景是未来 - 例如,对于sshd_config中我已经把未来如果情况:SSHD配置检查bash脚本

if [ "`grep -E ^Protocol /etc/ssh/sshd_config`" == "Protocol 1" ]; then 
    echo "Protocol should be set to 2"; 
fi 

的问题是 - 如果什么有一些变量及其值之间的一个以上的空间? (协议2或PermitRootLogin否,例如); /*s/s和类似的技巧没有帮助。

有没有人有一个样本来检查bash脚本中的SSHD配置以在这里发布案例? 在此先感谢!

grep的-E选项将其放入扩展的正则表达式模式中。所以,你可以使用扩展正则表达式(^Protocol +1意味着开始Protocol线,随后1个或多个空格,然后性格1):

if grep -Eq '^Protocol +1' /etc/ssh/sshd_config; then 
    echo "Protocol should be set to 2"; 
fi 

[yY]意味着字符yY

if grep -Eq '^PermitEmptyPasswords +[yY][eE][sS]' /etc/ssh/sshd_config; then 
    echo "PermitEmptyPasswords should be set to no"; 
elif grep -Eq '^PermitEmptyPasswords +[nN][oO]' /etc/ssh/sshd_config; then 
    echo "PermitEmptyPasswords meets requirements"; 
fi 

和许多其他有趣的功能。备注:

  • 您应该考虑在sshd_config文件中有多个匹配行的情况。
  • -q grep选项禁止打印匹配的行。如果找到了匹配的行,grep只会以状态0退出,否则状态为1(未找到)或2(错误)。
  • if语句后面可以紧跟一个要执行的命令列表。如果列表的退出状态为0,则采取then分支。在我们的案例中,列表只是grep
+0

如何把案例Yes和No(例如PermitEmptyPasswords)呢? 例如: if grep -Eq'^ PermitEmptyPasswords + yes'/ etc/ssh/sshd_config;那么 回声“价值不符合要求”; 其他回声“价值确实符合要求”

+0

@Kristian将此添加到我的答案。试试也许找到扩展正则表达式的文档,这是一个非常有用的知识。 –

+0

感谢您的提示,我是脚本编写新手,所以有些程序现在还不清楚1/1。 –


试试这个:

if [[ $(cat /etc/ssh/sshd_config | awk '/^Protocol/{print $2}') != 2 ]]; then 
    echo "Protocol should be set to 2" 
fi 

使用grep得到协议2行。

然后取出协议1线,其可包括2作为协议2,1

这样最后的散列应该排除。最后回显需要的字符串。

在grep的加入-i在grep命令不区分大小写

grep -i "Protocol 2" /etc/ssh/sshd_config | grep -v "#"|grep -v "Protocol 1"|| echo "Protocol 2 is needed"