服务器关闭了phpseclib连接?

phpseclib connection closed by server?

我有一个非常简单的 PHP 脚本,它试图从 CENTOS 7 机器连接到 SFTP 服务器。通过 composer 使用 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 没有显示错误只是一个普通的 "Connection closed by server"。我已经为此工作了好几天..

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

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

更多详情:

请任何人给我们一些建议,因为这让我耗费了 DAYS 天,希望不是几周!提前致谢。

来自您的代码:

$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"));