我正在PHP
使用该ssh2
库通过 SSH 将动态 shell 命令传递给服务器。我传递的命令是(注意这只是一个例子,命令是动态的和用户生成的)。
$command = 'ls -al
free -m';
注意换行符,这是必需的,因为用户可以使用换行符和制表符键入完整的 bash 脚本。然后,我执行以下操作来构建要使用 ssh2 库执行的实际命令:
$command = str_replace("'", "\'", $command);
$command = 'echo $\'' . $command . '\' | bash';
这导致最终命令:
echo $'ls -al
free -m' | bash
上面的命令直接在 shell 上执行得很好,但是当我使用 ssh2 从 PHP 执行它时,我得到:
ls: invalid option --
Try `ls --help' for more information.
所以我想,好吧必须有一些特殊字符或者美元符号没有被转义,所以我做了:
print_r(bin2hex($command));
结果是:
6563686f2024276c73202d616c0d0a66726565202d6d27207c2062617368
不过,将十六进制转换为 ascii 会返回正确的命令(完全如上)。
知道是什么原因造成的吗?