服务器是否关闭了phpseclib连接?

服务器是否关闭了phpseclib连接?,php,ftp,sftp,phpseclib,Php,Ftp,Sftp,Phpseclib,我有一个非常简单的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 {

我有一个非常简单的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_日志,没有显示错误,只是打开了一个简单的“服务器关闭的连接”。这件事我已经做了好几天了

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

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

更多详细信息:

  • 在工作中,我可以通过FILEZILLA/WINSCP连接到FTP服务器
  • CENTOS box服务器是我们工作网络的一部分
  • 我无法从家连接到FTP服务器
  • 在CENTOS上,我启用了“ssh_config”,并使用ssh-kegen-t RSA生成了密钥,我甚至将id_RSA.pub添加到了授权密钥中
请任何人给我们一些建议,因为这是消耗我几天希望不是几个星期!提前感谢。

从您的代码:

$rsa->loadKey("../../.ssh/id_rsa");
试试这个:

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

你真的想使用多因素身份验证吗?根据我的经验,SSH服务器很少设置成这样。更可能的情况是您有一个受密码保护的RSA私钥,此时您可以执行以下操作:

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

谢谢你的来电。是的,我只是忘了在帖子中包含文件内容。但是,根据您的第二个建议,当您设置密码时,您是指我生成的rsa私钥还是指远程服务器rsa密钥?我一直认为它的意思是?@Chopnut-in,就SSH客户端而言,远程服务器rsa密钥始终是一个公钥。我从来没有听说过RSA公钥格式有一个与之相关联的密码,也没有必要这样做,因为公众应该是公开的。所以,是的,我指的是您生成的rsa私钥。Re:“我一直认为这是为了解释?”<代码>$rsa->setPassowrd($pwd)设置密钥以解密RSA私钥(如果已加密)。idk,如果您的私钥是否加密,但根据我的经验,加密私钥比多因素身份验证服务器更常见..呃,这是有效的。这就是我所做的。我用FTP服务器的密码重新生成了我的私钥,然后用$FTP->login($user,$pwd,$rsa)为登录提供信息。现在我的问题是,为什么它会起作用?这次我所做的唯一区别就是使用FTP密码作为新密钥的密码。这就是我用ftp密码生成密钥的方法吗?谢谢你,诺伯特。@Chopnut-首先,让我们验证一下你正在使用的auth方法。如果你能做
define('NET\u SSH2\u LOGGING',2)
位于文件顶部,然后
echo$ssh->getLog()登录后,如果可以将日志输出发布到pastebin.com链接中,然后将该链接发布到此处,那就太好了。这将告诉我们是否需要RSA密钥。我有点想知道是否不需要。如果您使用$sftp->login('username'、'rightpw'、'errowpw')`并且没有使用多因素身份验证,那么您可以毫无问题地登录ErrorPW'`将被忽略,并且将永远不会提交到服务器。很抱歉响应太晚。坏消息是,几天后,我又开始处理代码并再次刷新页面。突然,它不再工作了。我很想做我上次做的事情,但这次,我只是不想玩得很好。你认为发生了什么事?这可能是他们的FTP服务器问题吗?我发誓在我离开它之前,它已经运行并测试了好几次了。现在我变得很沮丧。。
$rsa->setPassword($pwd);
$rsa->loadKey(file_get_contents("../../.ssh/id_rsa"));