PHP和phpseclib连接问题

时间:2014-09-09 14:44:18

标签: php rsa sftp phpseclib

我使用PHP和phpseclib遇到连接问题。我希望以前有人见过这个问题。我已经使用Filezilla(本地PC)成功测试了SFTP连接。我使用somefile.pem文件作为私有RSA密钥。我可以查看该文件并确认它说“-----开始RSA私钥-----'在开始。 Filezilla不需要密码,只需要私钥。

在下面的代码中,我有基本的SFTP设置。我已经尝试了三种登录方式。似乎没有连接 - 连接错误。

http://phpseclib.sourceforge.net/new/sftp/examples.html

同样的.pem文件位于服务器上,试图通过phpseclib运行SFTP连接。我可以var_dump并确认$ pem变量是一个字符串。当我var_dump $ key对象时,我没有看到RSA密钥文本。我以为它会在某个地方的var_dump中。似乎loadKey方法没有加载$ pem字符串。

我也无法使用echo $ sftp-> getLog();

获取日志输出
define('NET_SFTP_LOGGING', 2); //turn on logging.

require_once('Net/SSH2.php');
require_once('Net/SFTP.php');
require_once('Net/SFTP/Stream.php');
require_once('Crypt/RSA.php');
require_once('Math/BigInteger.php');

$sftp = new Net_SFTP('***IP_ADDRESS***');
$key = new Crypt_RSA();
$key->setPassword('***PASSWORD***');
$pem = file_get_contents(FCPATH . '**PATH***/somefile.pem'); // RSA PRIVATE KEY
$key->loadKey($pem);

if (!$sftp->login('**USERNAME***', $key) && !$sftp->login('**USERNAME***', '**PASSWORD***')) {
//if (!$sftp->login('**USERNAME***', '**PASSWORD***')) {
//if (!$sftp->login('**USERNAME***', $key)) {
    echo "<pre>";
    var_dump($pem);
    var_dump($key);
    var_dump($sftp);
    echo $sftp->getSFTPLog();
    exit('Login Failed');
}

错误通知:

A PHP Error was encountered
Severity: User Notice
Message: Cannot connect to **IP**:22. Error 110. Connection timed out
Filename: Net/SSH2.php
Line Number: 960

PHP Info显示以下内容:

注册的PHP Streams:https,ftps,compress.zlib,compress.bzip2,php,file,glob,data,http,ftp,phar,zip

已注册的流套接字传输:tcp,udp,unix,udg,ssl,sslv3,sslv2,tls

1 个答案:

答案 0 :(得分:1)

在使用任何私钥之前它会出错。所以它与密钥无关。

检查第960行附近的Net\SSH2.php

$this->fsock = @fsockopen($this->host, $this->port, $errno, $errstr, $timeout);
if (!$this->fsock) {
    user_error(rtrim("Cannot connect to $host. Error $errno. $errstr"));
    return false;
}

确保从您的网络服务器到SFTP服务器的连接。您的网络服务器可能根本不允许出站连接。