我正在处理一个 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
使用 pecl 扩展http://php.net/manual/en/book.ssh2.php