phpseclib连接被服务器关闭?

时间:2018-06-30 01:05:55

标签: php ftp sftp phpseclib

我有一个非常简单的PHP脚本,试图从CENTOS 7盒连接到SFTP服务器。通过作曲家使用phpseclib。

<?php
require('vendor/autoload.php');
$usr = 'xx';
$pwd = 'xx';
$host = 'sftp.domain.com.au';

$sftp = new SFTP($host);

if($sftp->login($usr, $pwd)){
   echo "Connected.";
}else {
   echo "Failed";
}
?>

甚至使用了RSA密钥

<?php
require('vendor/autoload.php');
$usr = 'xx';
$pwd = 'xx';
$host = 'sftp.domain.com.au';

$sftp = new SFTP($host);
$rsa  = new RSA();
$rsa->loadKey(file_get_contents("../../.ssh/id_rsa"));
if($sftp->login($usr, $pwd, $rsa)){
   echo "Connected.";
}else {
   echo "Failed";
}
?>

上面使用RSA编写的脚本实际上确实工作了几次,并且使我联系起来。因此,我认为我需要了解它的工作原理,并进行一些更改。我尝试生成另一个覆盖现有密钥的密钥。但是这次它不再起作用了。

我还打开了NET_SFTP_LOGGING,没有任何显示错误,只是一个简单的“服务器关闭了连接”。我已经为此工作了好几天。

我唯一能想到的是当我重新生成密钥并以某种方式覆盖ID_RSA时,也许服务器认为它不再是正确的密钥了?

另外,当我使用WinSCP进行连接时,似乎FTP服务器正在提供一种算法:ssh-rsa 4096,sha256和md5代码。这是我需要在PHP脚本中使用以正确连接的东西吗?只是试图排除任何可能性。

更多详细信息:

  • 下班后我可以通过FILEZILLA / WINSCP连接到FTP服务器
  • CENTOS盒式服务器是我们工作网络的一部分。
  • 我无法从家里连接到FTP服务器。
  • 在CENTOS框中,我启用了“ ssh_config”并使用ssh-kegen -t RSA生成了密钥,甚至将id_rsa.pub添加到了authorized_keys

请任何人给我们一些建议,因为这会消耗我几天的时间,希望不会持续数周!预先感谢。

1 个答案:

答案 0 :(得分:1)

根据您的代码:

$rsa->loadKey("../../.ssh/id_rsa");

尝试一下:

$rsa->loadKey(file_get_contents("../../.ssh/id_rsa"));

if($sftp->login($usr, $pwd, $rsa)){

实际上要使用多因素身份验证吗?以我的经验,执行此操作的SSH服务器设置很少。似乎更有可能是您具有受密码保护的RSA私钥,此时您将执行以下操作:

$rsa->setPassword($pwd);
$rsa->loadKey(file_get_contents("../../.ssh/id_rsa"));