仅运行多个内联命令的第一个Bash命令

时间:2012-06-12 17:20:04

标签: bash ssh sh

我有一个通过SSH运行某些命令的程序。一些命令是静态的(总是相同的),而其他命令的参数在运行之间发生变化。该程序使用私钥连接到服务器,并锁定授权密钥以强制命令“sh run_script.sh”。

run_script.sh只有在与一组静态命令匹配时才会运行$ SSH_ORIGINAL_COMMAND,或者如果它以某种方式开始(对于非静态命令)。

问题在于像

这样的东西
allowedCommand arg1 arg2 && rm -r ~/ 

可能会漏掉。

是否可以让bash只运行第一个命令,并忽略管道或&&后面的任何内容?

1 个答案:

答案 0 :(得分:1)

您可以将包装器脚本设置为登录shell(而不是/bin/bash)并让它使用sed或其他东西来删除不需要的部分。它可能会受到误报,并且可能因包含空格和其他情况的参数而失败(参见BashFAQ/050)。

这种方法可能会引入无法预见的安全问题。

最好使用sshsudo提供的安全功能,rbash等受限制的shell以及操作系统组合提供的其他安全功能。