无法从Apache内部与Net_SSH2连接

wes*_*mat 4 php apache ssh phpseclib

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

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

这是代码:

<?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() );
}
?>
Run Code Online (Sandbox Code Playgroud)

但是,当我在apache中从命令行运行相同的代码时,它运行良好。

我对使用paramiko进行SSH并从apache调用的python脚本有完全相同的问题。它可以从命令行正常运行,但是在Apache中从PHP调用时失败,并显示权限错误。使用此脚本只是一个测试;python不会在最终解决方案中使用。

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

更新:

AAaarrrggh!被SELinux再次咬伤。此页面具有解决方案: php run git得到了“ ssh许可被拒绝”

答案是:

setsebool -P httpd_can_network_connect=1
Run Code Online (Sandbox Code Playgroud)

基本上,apache无权启动网络连接!

我忽略了这是在CentOS系统上的问题,因此在SELinux的密切关注下,这是我的错。

小智 6

答案是:

setsebool -P httpd_can_network_connect=1
Run Code Online (Sandbox Code Playgroud)

基本上,apache无权启动网络连接