php - SCP 命令行和 PHP exec() 不做同样的事情

标签 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

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

最佳答案

我认为这是一个权限问题。 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/

相关文章:

php - Composer 设置安装错误

php - Mysql 返回 2 个链接项,按创建排序并按表 ID 分组

linux - 如何在 BASH 中以 DIALOG 形式显示可用 Wifi 网络列表?

c# - Mono Socket.Bind 在连接之前绑定(bind)以使用特定接口(interface)

apache - 授予 ubuntu 访问 www-data 的权限

node.js - 如何将不同的子域指向同一服务器上的不同应用程序? (使用node.js作为代理?)

php - 用于匹配标点符号和字母数字字符的正则表达式

php - 如何在 PHP 页面中设置变量,将其传递给 CSS 文件并将其分配给单个 CSS 属性?

linux - 如何将所有具有相同后缀的文件复制到另一个目录? - Unix

ruby-on-rails - 在 Rails/Apache 中自动托管用户域