【发布时间】:2014-11-03 01:08:58
【问题描述】:
我在使用 PHP 和 phpseclib 时遇到了连接问题。我希望有人以前见过这个问题。我已经使用 Filezilla(本地 PC)成功测试了 SFTP 连接。我正在使用 somefile.pem 文件作为 RSA 私钥。我可以查看该文件并确认它在开头显示“-----BEGIN RSA PRIVATE KEY-----”。 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 信息显示如下:
已注册的 PHP 流:https、ftps、compress.zlib、compress.bzip2、php、file、glob、data、http、ftp、phar、zip
注册流套接字传输:tcp、udp、unix、udg、ssl、sslv3、sslv2、tls
【问题讨论】: