我正在尝试找到在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;错误 包大小
还有什么我可以改变的吗?我应该使用什么数据包大小?如果我没有转移任何文件,这真的很重要吗?
答案 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服务器上。当我删除用户时,再次重新创建它,现在我获得了成功的连接。