当我在命令行上运行它时:
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
。
我想知道这是否是权限问题。我知道我在命令行上运行的是谁,但我不确定是谁在运行脚本。这可能是问题所在吗?还是完全不同的东西?
最佳答案
我认为这是一个权限问题。 SSH 客户端通常拒绝连接,除非权限已设置为第三方(例如用户“nobody”)无法读取 key 。
也就是说,您使用的是 *.ppk 有点奇怪 - 这是 PuTTY key 使用的扩展 - OpenSSH 不支持。
也就是说,我的建议是使用 phpseclib's SCP client .此时,您可以将键作为字符串保存在 PHP 文件本身中,而不必将它们保存在文件系统中。更多信息:
https://github.com/phpseclib/phpseclib/blob/master/phpseclib/Net/SCP.php
关于php - SCP 命令行和 PHP exec() 不做同样的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16159943/