我在我的项目中使用phpseclib。我已安装它并使用以下代码进行测试,该代码类似于示例here。
更新代码:
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 }
代码更新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 }
它从第16行退出。getLog()
没有给出任何内容,因此很难知道问题出在哪里。我使用PuTTY测试了登录凭据。它也无法登录其他服务器。我无法理解导致问题的。
任何帮助都将受到高度赞赏!
答案 0 :(得分:1)
Net_SSH2
不是函数,这是此类中的类和构造函数。
所以第3行应该是
if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!");
如果您想进一步检查第5行后Net_SSH2
课程中是否存在Net_SSH2
方法,您可以添加以下内容:
if (!method_exists($ssh, 'Net_SSH2')) die("Net_SSH2 class doesn't have Net_SSH2 method");
答案 1 :(得分:1)
如果点击了您提供的链接上的“启用记录”按钮,您将看到在包含Net / SSH2.php后立即执行以下操作:
define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);
试试。
答案 2 :(得分:1)
尝试在PHP脚本的顶部执行此操作:
error_reporting(E_USER_NOTICE);
将error_reporting设置为0会抑制user_error,因此您的PHP设置很可能只是抑制错误。例如
error_reporting(E_USER_NOTICE);
user_error('zzzz', E_USER_NOTICE);
VS
error_reporting(0);
user_error('zzzz', E_USER_NOTICE);
答案 3 :(得分:0)
当然,您可以将第3行更改为:
if( !class_exists('Net_SSH2')...
但我建议你抛出一些异常处理。当使用PHPSecLib时,我只有问题,所以我创建了this SSH2 Class,它确实需要安装PHP SSH2扩展。
您应该尝试致电:getLog()
以找出失败的原因。
echo $ssh->getLog();
答案 4 :(得分:0)
我最终在我尝试连接的服务器(服务器B)上托管我的代码。相同的代码在相反的方向工作(我可以连接到我的代码以前的服务器A)!我最后得出结论,服务器A存在环境问题。 我很感谢那些在这里帮助我的人!
答案 5 :(得分:0)
鉴于最新的评论,我假设您的代码存在于第8行(实例化Net_SSH2()对象)...
我遇到了一个非常类似的问题,一旦部署,include()
可以工作但是check_exists()
并且实例化一个新的Net_SSH2
对象会失败...但解析我的php文件(之前部署)使用php命令行工具可以正常工作......
所以问题发生在服务器上(在我的情况下是Apache):安装phpseclib的目录设置了权限,以至于我甚至无法cd
。
事实上,我的部署脚本只是复制服务器上的文件并设置奇数权限,以便无法访问SSH2.php。
也许你在这里有类似的问题?