0

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

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

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

4

1 回答 1

1

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

也就是说,您使用 *.ppk 有点奇怪 - 这是 PuTTY 密钥使用的扩展 - OpenSSH 不支持。

也就是说,我的建议是使用phpseclib 的 SCP 客户端。此时您可以将密钥作为字符串保存在 PHP 文件本身中,而不必将它们保存在文件系统中。更多信息:

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

于 2013-04-29T22:31:20.667 回答