2012-06-12 151 views
0

我有一个程序通过SSH运行某些命令。一些命令是静态的(总是相同的),而另一些命令则在运行之间改变。该程序使用私钥连接到服务器,并且授权密钥被锁定以强制命令“sh run_script.sh”。只运行多个内联命令的第一个Bash命令

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

的问题是,像

allowedCommand arg1 arg2 && rm -r ~/ 

可能会漏网之鱼。

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

回答

1

您可以将包装脚本设置为登录shell(而不是/bin/bash),并使用sed或其他东西来剥离不需要的部分。它可能会出现误报,并且可能会因包含空白和其他情况的参数而失败(请参阅BashFAQ/050)。

此方法可能会引入无法预料的安全问题。

使用由ssh,sudo,受限制的外壳(如rbash)和操作系统提供的其他安全设施组合提供的安全功能会更好。