【发布时间】:2013-04-16 02:41:57
【问题描述】:
当我在命令行上运行它时:
scp -i private.ppk -P 22 foo.txt someuser@domain.com:/home/someuser/foo.txt
一切正常。 foo.txt 被转移到远程服务器没有任何问题。我需要从 PHP 运行完全相同的命令。所以,我有以下代码:
$command = 'scp -i private.ppk -P 22 foo.txt someuser@domain.com:/home/someuser/foo.txt';
exec($command);
这不起作用。 PHP 文件正在与private.ppk 相同的目录中执行。当我var_dumpexec 的结果时,我得到一个NULL。
我想知道这是否是权限问题。我知道我在命令行上运行谁,但我不确定谁在运行脚本。这可能是问题吗?还是完全不同?
【问题讨论】:
-
尝试使用 foo.txt 的完整路径
-
好的,我做到了。这绝对是个问题。但是,我仍然得到相同的结果。没有文件传输。 NULL 是
exec的结果。 -
我的脚本以
nobody运行。这会导致任何问题吗? -
以
nobody运行的脚本在读取foo.txt时应该不是问题,但是读取私钥文件可能是问题。尝试将 ppk 复制到/home/nobody/.ssh/private.ppk。请务必将chown也发送给nobody用户。 -
更多奇怪的问题。首先,我在私钥文件上做了一个
file_exists。它返回一个TRUE。但是当我把它放在/home/foo/.ssh/private.ppk中时,我得到一个FALSE。请注意,我必须将它放在“foo”中(“foo”是一个确实存在于 /home/ 下的文件夹)。我不能把它放在/home/nobody/.ssh/因为nobody不存在;我应该创建它吗?我知道 PHP 以“nobody”运行,因为我从 PHP 中回显了whoami的结果。