当我在命令行上运行它时:
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
。
我想知道这是否是一个权限问题。我知道我在命令行上运行的是谁,但我不确定是谁在运行脚本。这可能是问题吗?或者它是完全不同的东西?
答案 0 :(得分:1)
我认为这是一个许可问题。 SSH客户端通常拒绝连接,除非已设置权限以使第三方(例如用户“nobody”)无法读取密钥。
那就是说,你使用* .ppk有点奇怪 - 这是PuTTY键使用的扩展名 - OpenSSH不支持。
那就是说,我的建议是使用phpseclib's SCP client。您可以在此处将密钥作为字符串存储在PHP文件中,而不必将它们存放在文件系统中。更多信息:
https://github.com/phpseclib/phpseclib/blob/master/phpseclib/Net/SCP.php