PHP和PHPSec尝试建立连接并获取错误

时间:2014-03-24 13:41:24

标签: php sftp phpseclib

我正在尝试找到在PHP中测试sFTP连接的最简单方法。我不打算上传/下载任何文件。我只是想打开一个连接,确认它没关系,然后关闭它。

我遇到了'phpSec'似乎做了我想做的事,除了,我无法让它发挥作用。

到目前为止我的脚本是:

<?php
require_once '../lib/phpSec/bootstrap.php';
require_once 'SplClassLoader.php';
$classLoader = new SplClassLoader('phpSec', '../Generic/lib');
$classLoader->register();


$server = "123.456.789.012";
$port = "22";
$username = "xxx";
$password = "xxx"; 

set_include_path(get_include_path() . PATH_SEPARATOR . 'c:\Apache\htdocs\phpseclib');
define('NET_SSH2_LOGGING', 2);

include 'phpseclib/Net/SFTP.php';

define('NET_SFTP_LOGGING', NET_SFTP_LOG_COMPLEX);

$sftp = new Net_SFTP($server);

// Check SFTP Connection
if (!$sftp->login($username, $password)) 
    {
        echo 'Login Failed.';

        print "</br>";

        $ERR1 = $sftp->getSFTPErrors();
        print_r($ERR1);

        print "</br>";

        $ERR2 = $sftp->getErrors();
        print_r($ERR2);
    }
else
    {
        echo 'Connected to SFTP.';

        echo $sftp->pwd();
    }

?>

此输出为“登录失败”。 $sftp->getSFTPErrors();的输出是一个空白数组。 $sftp->getErrors();的输出是一个空白数组。

在sFTP服务器上,我可以看到日志文件中的连接,错误:

  

2014-03-24 11:36:35 [000001ew] {450} SSH_ERROR_CODE:11 - &gt;错误   包大小

还有什么我可以改变的吗?我应该使用什么数据包大小?如果我没有转移任何文件,这真的很重要吗?

3 个答案:

答案 0 :(得分:1)

不确定为什么你的语句不起作用,但为了查看对象方法的错误,你应该使用try和catch。

try{
    $sftp->login($username, $password);
}
catch(Exception $e){
    echo $e->getMessage();
}

希望这有助于调试过程!

答案 1 :(得分:0)

为什么不使用PHP未构建的函数? 它们比第三方软件更可靠。

http://www.php.net/manual/en/function.ssh2-sftp.php

<?php
$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');

$sftp = ssh2_sftp($connection);

答案 2 :(得分:0)

感谢所有想法。我认为最终问题出在sFTP服务器上。当我删除用户时,再次重新创建它,现在我获得了成功的连接。