PHP命令的工作原理是静态运行,而不是与var之间



我的问题是这样的。当我尝试运行以下命令时,没有任何工作,我没有得到错误消息,没有输出,并且文件不会传输到另一个设备(这里使用本地主机地址作为占位符)。

shell_exec('sshpass -p "'.$password.'" scp -o StrictHostKeyChecking=no /file.txt user@127.0.0.1:/home/user/ 2>&1');

但是如果我在命令中以纯文本形式传递密码,而不是使用变量(如下所示),它就会正常工作??

shell_exec('sshpass -p "Password" scp -o StrictHostKeyChecking=no /file.txt user@127.0.0.1:/home/user/ 2>&1');

我已经试过了:

  • 我已经多次尝试输入密码,它总是正确的,因为我只有一个简单的测试目的。
  • 我已经尝试过先编写命令,然后保存到另一个变量中,然后执行

我现在已经尝试了一些事情,但不知何故没有一个工作,我不明白为什么,因为最后这些是1:1相同的命令…希望我在这里能更聪明一些

(该网站在Linux apache服务器上运行,我尝试用php v. 7.3.19运行)

看看这段代码的输出,它真的会帮助你调试

<?php
$password = "Password";
$commandOne = 'sshpass -p "'.$password.'" scp -o StrictHostKeyChecking=no /file.txt user@127.0.0.1:/home/user/ 2>&1';
$commandTwo = 'sshpass -p "Password" scp -o StrictHostKeyChecking=no /file.txt user@127.0.0.1:/home/user/ 2>&1';
echo $commandOne . PHP_EOL;
echo $commandTwo . PHP_EOL;

sshpass -p "Password" scp -o StrictHostKeyChecking=no /file.txt user@127.0.0.1:/home/user/ 2>&1
sshpass -p "Password" scp -o StrictHostKeyChecking=no /file.txt user@127.0.0.1:/home/user/ 2>&1

当我使用put " password "时它们是完全相同的。在密码变量中,所以现在试着输入你的真实密码并比较它们,它会告诉你问题所在
如果你得到相同的结果,那就在你的代码

中试试这个
<?php
$password = "Password";
$command = 'sshpass -p "'.$password.'" scp -o StrictHostKeyChecking=no /file.txt user@127.0.0.1:/home/user/ 2>&1';
shell_exec($command);

最新更新