SCP命令行和PHP exec()没有做同样的事情

时间:2013-04-23 02:34:28

标签: php linux apache ssh scp

当我在命令行上运行它时:

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_dump exec的结果时,我得到NULL

我想知道这是否是一个权限问题。我知道我在命令行上运行的是谁,但我不确定是谁在运行脚本。这可能是问题吗?或者它是完全不同的东西?

1 个答案:

答案 0 :(得分:1)

我认为这是一个许可问题。 SSH客户端通常拒绝连接,除非已设置权限以使第三方(例如用户“nobody”)无法读取密钥。

那就是说,你使用* .ppk有点奇怪 - 这是PuTTY键使用的扩展名 - OpenSSH不支持。

那就是说,我的建议是使用phpseclib's SCP client。您可以在此处将密钥作为字符串存储在PHP文件中,而不必将它们存放在文件系统中。更多信息:

https://github.com/phpseclib/phpseclib/blob/master/phpseclib/Net/SCP.php