Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法使用SSH2进行连接_Php_Ssh - Fatal编程技术网

Php 无法使用SSH2进行连接

Php 无法使用SSH2进行连接,php,ssh,Php,Ssh,我正在我的项目中使用。我已经安装了它,并且正在使用下面类似于示例的代码段对其进行测试 更新代码: 1 require("Net/SSH2.php"); 2 3 if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!"); 4 5 $ssh = new Net_SSH2('***'); // the host IP address

我正在我的项目中使用。我已经安装了它,并且正在使用下面类似于示例的代码段对其进行测试

更新代码:

1           require("Net/SSH2.php");
2   
3           if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!");
4           
5           $ssh = new Net_SSH2('***');   // the host IP address 
6           
7           if (!method_exists($ssh, 'Net_SSH2')) die("Net_SSH2 class doesn't have Net_SSH2 method!");
8    
9           if (!$ssh->login('***', '***')) {   // (verified) username and password
10              echo "LOG: " . $ssh->getLog() . "<br>";
11              exit('Login failed!');
12          }
1 require(“Net/SSH2.php”);
2.
3如果(!class_存在('Net_SSH2'))死亡(“class Net_SSH2不存在!”);
4.
5$ssh=new Net_SSH2('***');//主机IP地址
6.
7如果(!method_exists($ssh,'Net_SSH2'))死亡(“Net_SSH2类没有Net_SSH2 method!”);
8.
9如果(!$ssh->登录('***','***'){//(已验证)用户名和密码
10 echo“LOG:”$ssh->getLog()“
”; 11退出('登录失败!'); 12 }
代码更新2:

1       require("Net/SSH2.php");
2
3       define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);
4
5       if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!");
6       
7       $ssh = new Net_SSH2('***');   // the host IP address 
8       
9       if (!method_exists($ssh, 'Net_SSH2')) die("Net_SSH2 class doesn't have Net_SSH2 method!");
10
11      if (!$ssh->login('***', '***')) {   // (verified) username and password
12          echo "LOG: " . $ssh->getLog() . "<br>";
13          echo "ALL ERRORS: ";
14          print_r($ssh->getErrors());
15          echo "<br>LAST ERROR: " . $ssh->getLastError() . "<br>";
16          exit('Login failed!');
17      }
1 require(“Net/SSH2.php”);
2.
3定义('NET_SSH2_LOGGING',NET_SSH2_LOG_COMPLEX');
4.
5如果(!class_存在('Net_SSH2'))死亡(“class Net_SSH2不存在!”);
6.
7$ssh=new Net_SSH2('***');//主机IP地址
8.
9如果(!method_exists($ssh,'Net_SSH2'))死亡(“Net_SSH2类没有Net_SSH2 method!”);
10
11如果(!$ssh->登录('***','***'){//(已验证)用户名和密码
12 echo“LOG:”$ssh->getLog()“
”; 13回声“所有错误:”; 14打印($ssh->getErrors()); 15回显“
最后一个错误:”.ssh->getLastError()。“
”; 16退出('登录失败!'); 17 }
它在16号线出口
getLog()
没有给出任何信息,因此很难知道问题出在哪里。我使用PuTTY测试了登录凭据。它也无法登录到其他服务器。我无法理解是什么导致了问题


任何帮助都将不胜感激

当然,您可以将第3行更改为:

if( !class_exists('Net_SSH2')...
但我建议您加入一些异常处理。当使用PHPSecLib时,我除了问题之外什么都没有,所以我创建了一个需要安装phpsh2扩展的

您应该尝试调用:
getLog()
,以找出失败的原因

echo $ssh->getLog();

Net\u SSH2
不是一个函数,它是这个类中的一个类和构造函数。 所以第三行应该是

if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!");
如果要进一步检查类
Net\u SSH2
中是否存在
Net\u SSH2
方法,可以在第5行之后添加以下内容:

if (!method_exists($ssh, 'Net_SSH2')) die("Net_SSH2 class doesn't have Net_SSH2 method");
如果点击所提供链接上的“启用日志记录”按钮,您将看到在包含Net/SSH2.php后立即执行以下操作:

define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

试试看。

尝试在PHP脚本的顶部执行此操作:

error_reporting(E_USER_NOTICE);
将error_reporting设置为0会抑制user_错误,因此很可能您的PHP设置只是在抑制错误。例如

error_reporting(E_USER_NOTICE);

user_error('zzzz', E_USER_NOTICE);
vs


我最终在我试图连接的服务器(服务器B)上托管了我的代码。同样的代码在相反的方向工作(我可以连接到我以前代码所在的服务器A)!我最后得出结论,服务器A存在环境问题。
我很感激那些在这里帮助我的人

给出了最新的注释,我假设您的代码存在于第8行(其中Net_SSH2()对象被实例化)

我刚刚遇到了一个非常类似的问题,即一旦部署,
include()
将起作用,但
check\u exists()
并实例化一个新的
Net\u SSH2
对象将失败。。。但是用php命令行工具解析我的php文件(在部署之前)会很好

所以问题出在服务器上(在我的例子中是Apache):安装phpseclib的目录设置了权限,因此我甚至无法
cd
访问它。

事实上,我的hoem部署脚本只是简单地复制服务器上的文件,并设置奇数权限,从而无法访问SSH2.php


也许你也有类似的问题?

我按照你说的做了修改。现在在8号线下车。但是登录凭据是正确的,所以我的修改工作正常。很难说错误的第8行会是什么。仔细检查您的凭据,可能是您尝试连接的服务器有问题,等等,它一直工作到那个部分。但是,凭据是正确的,我只是使用PuTTY签入。我还尝试连接到其他服务器,但登录再次失败。这与路径无关。如果我回显SSH2.php中的内容,我实际上可以在网页上看到它。我在SSH2.php中附加了SSH2类,然后我尝试了您提供的链接中的“SSH2用法”部分,但在第17行失败。它无法连接到服务器。另外,echo$ssh->getLog();什么也不给。抱歉。在该类中,它实际上使用的是函数ssh2_connect(),我没有安装它,因为我发现phpseclib更好,但它对我不起作用。您是否从Putty连接到尝试访问该框的同一台机器上?在您试图通过SSH连接到的服务器上是否有ACL?是的,我是从同一台机器上的PuTTY连接的。我如何检查服务器上的ACL?我已经试过了,这没什么区别。很抱歉请参阅我更新的代码。var_dump($ssh->getLog())是怎么说的?我猜您是在某种程度上抑制E_USER_NOTICE错误,并且根本没有连接到ssh服务器。也许在php.ini中有一些设置可以实现这一点。无论如何,试试这个:在第一行put
define('NET\u SSH2\u LOGGING',2)$ssh->getLog()
的输出,我试过了。它没有显示$ssh->getLog()的任何内容
error_reporting(0);

user_error('zzzz', E_USER_NOTICE);