PHP 脚本中的 SSH 命令 - 没有任何作用,但在 cmd 行中有效

PHP 脚本中的 SSH 命令 - 没有任何作用,但在 cmd 行中有效

我正在处理一个 EC2 盒子并尝试通过 SSH 命令另一个盒子。

该命令在命令行中有效,甚至在 php -a 交互中也有效。但是,在以 apache 运行时无效。示例 cmd:-

   system('ssh -i /home/me/keys/key.pem [email protected] "ls"');

我尝试将 apache 添加到 wheel 组,并在两个框上添加 gshadow。我还尝试将 pem 文件 chown 到 apache。没有用。

然而,其他两个用例概述中的命令响应很好。

这是怎么回事?有人知道吗?

答案1

首先;尝试以 Web 服务器用户身份运行它,例如:

sudo -u www-data <whatever_command>

第二,确保你不仅捕获正在执行的命令的结果,而且还捕获它返回的行。你可以在 PHP 中使用以下命令执行此操作:

string exec ( string $command [, array &$output [, int &$return_var ]] )

http://www.php.net/manual/en/function.exec.php

第三:请一定回复一个可行的答案。

答案2

您需要在 ssh 命令选项中指定用户:

system('ssh -i /home/me/keys/key.pem [email protected] "ls"');

除非 apache 有权访问您的 key.pem 文件,否则这可能仍然不起作用,这将是一个巨大的安全漏洞。我真的建议使用一些 ssh 库(就像其他人建议的那样)并使用自己的 ssh 密钥设置 apache,并设置它所连接的服务器以减少对该帐户的权限访问。

答案3

您需要使用 php openssh 库来正确运行这些命令,否则可能会危及系统的安全性。

答案4

相关内容