变量的Bash注入

变量的Bash注入,bash,code-injection,Bash,Code Injection,我有一段代码在非常远程的服务器上工作 ID=555 SLEEP_TIME=`ssh user@192.168.1.1 "cat /tmp/$ID.sleep; date >> /tmp/$ID.log"` echo SLEEP_TIME $SLEEP_TIME sleep $SLEEP_TIME 是的,大约$SLEEP\u TIME没有报价。 sshuser@192.168.1.1工作正常,无需密码,通过密钥。 我看到了/tmp/555.log。 很抱歉,我失去了对这个远程服务器(

我有一段代码在非常远程的服务器上工作

ID=555
SLEEP_TIME=`ssh user@192.168.1.1 "cat /tmp/$ID.sleep; date >> /tmp/$ID.log"`
echo SLEEP_TIME $SLEEP_TIME
sleep $SLEEP_TIME
是的,大约$SLEEP\u TIME没有报价。 sshuser@192.168.1.1工作正常,无需密码,通过密钥。 我看到了/tmp/555.log。 很抱歉,我失去了对这个远程服务器(上面的代码由cron运行)的控制,在sshd config中出错。 但我控制服务器192.168.1.1,我可以将任何内容放入/tmp/555.sleep=$sleep\u时间变量中 如何向$SLEEP\u时间变量注入一些代码,强制远程服务器执行它

这是100%合法的。这两台服务器都属于我的公司。请救救我!
事实上,我失去了对远程服务器的控制,因为我使用了复杂的端口转发技术来访问它,因为它的IP被占用了几次。

因为睡眠时间只是一个变量,没有被执行,我认为没有办法做到这一点。所以不,就我所知没有办法,对不起。

因为睡眠时间只是一个变量,没有执行,我认为没有办法做到这一点。所以,就我所知,没有办法,对不起

如何向$SLEEP\u时间变量注入一些代码,强制远程服务器执行它

你不能。Shell扩展每个命令执行一次。Shell扩展执行Shell参数扩展或命令替换。它同时发生。你不能两者都做。不能先展开变量,然后再展开第二次以运行命令替换,因为这是两次展开。从

(有人可能会说在bash per中的shell扩展之后会发生重定向,但一个简单的测试表明这不是真的。想知道这是否是故意的。但是bash手册不是为语言层编写的。这就是为什么它是“手册”,而不是“规范”。)

引用用于禁止分词。您唯一能做的就是将不可解析的参数传递到
sleep
或将两个或多个参数传递到sleep,从而使脚本出错

另外,请不要使用backticks``替换命令。它们已被弃用,不能嵌套、不可读,而且看起来很难看。使用
$(…)

如何向$SLEEP\u时间变量注入一些代码,强制远程服务器执行它

你不能。Shell扩展每个命令执行一次。Shell扩展执行Shell参数扩展或命令替换。它同时发生。你不能两者都做。不能先展开变量,然后再展开第二次以运行命令替换,因为这是两次展开。从

(有人可能会说在bash per中的shell扩展之后会发生重定向,但一个简单的测试表明这不是真的。想知道这是否是故意的。但是bash手册不是为语言层编写的。这就是为什么它是“手册”,而不是“规范”。)

引用用于禁止分词。您唯一能做的就是将不可解析的参数传递到
sleep
或将两个或多个参数传递到sleep,从而使脚本出错


另外,请不要使用backticks``替换命令。它们已被弃用,不能嵌套、不可读,而且看起来很难看。使用
$(…)

可以不使用密码进行ssh吗?@Simonare我相信这是一个与OPs问题无关的问题,而且,是的,一旦编写了
ssh副本id
,就可以很容易地设置不使用密码的ssh了。@KamilCuk在我的理解中,OP无法通过ssh@KamilCuk不运行此脚本时,我无法访问远程服务器。我完全控制192.168.1.1您可以不使用密码进行ssh吗?@Simonare我相信这是一个与OPs问题无关的问题,而且,是的,一旦编写了
ssh copy id
,就很容易设置不使用密码的ssh。@KamilCuk在我的理解中,OP无法通过ssh@KamilCuk不运行此脚本时,我无法访问远程服务器。我完全控制192.168.1.1 Backticks可以嵌套,但它是fugly。Backticks可以嵌套,但它是fugly。