在PHP中从exec函数运行'scp'脚本

在PHP中从exec函数运行'scp'脚本,php,bash,apache,Php,Bash,Apache,我正在尝试将文件从一台服务器SCP到外部邮件服务器 在我的代码中,我使用: exec('/full/path/to/script.sh' '/full/path/to/file_to_transfer.txt'); 在my Script.sh中,我有: scp -i /full/path/to/private.key $1 [user]@[ip]:/opt/mailman/mailman-bundler/venv-3.4/lib/python3.4/site-packages/mailman

我正在尝试将文件从一台服务器SCP到外部邮件服务器

在我的代码中,我使用:

exec('/full/path/to/script.sh' '/full/path/to/file_to_transfer.txt');
在my Script.sh中,我有:

scp  -i /full/path/to/private.key $1 [user]@[ip]:/opt/mailman/mailman-bundler/venv-3.4/lib/python3.4/site-packages/mailman/templates/en/.
当我通过CLI调用带有文件的脚本时,脚本运行正常,文件传输正常。当我以apache/www数据用户身份在PHP中运行它时,
exec()
调用失败,代码为126,翻译为:“调用的命令无法执行”

附加说明:

我注意到,第一次每个用户都尝试这个,他们得到了RSA指纹的确认。我认为剧本在这方面拖延了,这就是问题所在。我以www数据用户的身份手动进入并确认了指纹。这个问题仍然存在

在多次尝试之后,我创建了一个文件夹、脚本和文件的副本设置,并完全打开了权限—一直到根目录,以查看是否设置了错误的权限。我仍然收到126个错误

我的项目经理反对使用的想法,因为如果基本bash脚本失败,那么它也会因为与SSH2/SCP函数相同的原因失败

我有一种预感,上面的想法是错误的,因为脚本是通过CLI工作的,而不是通过Apache工作的,而PHP SCP函数是从Apache运行的


任何关于我的问题(从
exec()
调用在脚本中调用SCP)的来源或PHP SCP函数工作的确凿证据的见解都将受到赞赏。

我最近发布了一个项目,该项目允许PHP获取真实的Bash shell并与之交互。在这里获取:

下载后,您只需使用以下代码:

//if the script does not require root permissions you can change the
//second argument on getShell() to false. That will return a bash shell
//with permissions from www-data or apache user.

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/full/path/to/script.sh' '/full/path/to/file_to_transfer.txt');

可以按照php.ini中的配置禁用exec的使用。这是你能控制的吗?如果没有,也许您可以考虑使用ssh2类exec,因为exec没有被禁用。不过,我会研究ssh2类,谢谢你的参考。这是一种环境可以带来巨大变化的东西。例如,如果您的服务器正在运行selinux。您是否能够增加日志的详细程度?