我使用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
答案 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服务器的连接。您的网络服务器可能根本不允许出站连接。