php - 无法从 Apache 内部连接 ​​Net_SSH2

标签 php apache ssh phpseclib

我正在尝试从 PHP 使用 SSH,但出现以下错误:

注意:无法连接到[主机]。错误 13。 /usr/share/php/Net/SSH2.php 第 875 行的权限被拒绝

代码如下:

<?PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
include_once('Net/SSH2.php');
define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

$ssh = new Net_SSH2($host);

if( $ssh->login($id, $pw) )
{
  error_log("logged");
  $result['data'] = $ssh->exec('dir');
}
else
{
  error_log( $ssh->getLog() );
}
?>

但是,当我从命令行运行相同的代码并使用 apache 时,它​​运行良好。

我在使用 paramiko 到 SSH 并从 apache 调用的 python 脚本中遇到了完全相同的问题。它从命令行运行良好,但在 apache 中从 PHP 调用时失败并出现权限错误。使用这个脚本只是一个测试;最终方案不会用到python。

那么,为什么 SSH 在 apache 外部工作而不是在 apache 内部工作?我已经使用 su 从命令行将 PHP 代码作为 apache 运行并且也有效,所以这不是用户权限问题。

更新:

啊啊啊啊!再次被 SELinux 咬伤。此页面有解决方案: php run git got "ssh Permission denied"

答案是:

setsebool -P httpd_can_network_connect=1

基本上,apache 没有被授权启动网络连接!?!?

我没有提到这是在 CentOS 系统上,因此受到 SELinux 的关注,我的错误。

最佳答案

答案是:

setsebool -P httpd_can_network_connect=1

基本上,apache没有被授权发起网络连接

关于php - 无法从 Apache 内部连接 ​​Net_SSH2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24537090/

相关文章:

node.js - ubuntu 16.04 上的 Nodejs - 在控制台中运行脚本时出错

linux - 文件权限安全apache

linux - bash 脚本中查找函数的结果出现问题

ssh - 尝试通过 ssh 进入实例时关闭了 AWS EC2 连接

linux - Vim:通过 ssh 访问系统剪贴板 - Linux 到 OS X

php - 如何将数组传递给 laravel 5.4 中的@slot?

php - 了解并修复在 https 和 http 之间丢失的 php session

java - 无法停止ActiveMQ Producer?

php - 使用 PDO 进行动态列表查询

php - 加快我在 MySQL 中的索引 - CRC 或 MD5?