尝试设置首选算法时出现类型错误

问题描述 投票:0回答:1

我在使用以下代码时遇到问题。这只是登录前部分。 以前的工作方式是,我从文件中获取密钥。创建一个新的 sftp 对象,将首选算法设置为 ssh-dss(这是该特定服务器提供的唯一算法),然后登录。一切都很好。我一定是在服务器上更新了一些东西,导致事情搞砸了,因为代码没有改变,但这一点现在已经损坏了。

我不断收到此错误:

array_intersect(): Argument #1 ($array) must be of type array, string given 

我们正在使用 PHP 8.0.30
PHPSECLIB 3.0
在 Ubuntu 20.04.6 上
阿帕奇 2.4.62

我在 WordPress 上也遇到过类似的问题,但没有任何解决方案。

如果您能帮我解决这个问题,我将非常感激。


$key = $this->__getKeyWithFile($mykey, $myphrase);
$sftp = new SFTP($host, $port);
if (!empty($sftp)) {
  try {
    $sftp->setPreferredAlgorithms(['hostkey' => 'ssh-dss']);
    $sftp->login($user, $key)
  } catch (Error $er) {
     echo $er->getMessage();
  } catch (Exception $ex) {
     echo $ex->getMessage();
  }
}

编辑添加完整错误。我的不好。不过下面问题就解决了。

PHP Fatal error:  Uncaught TypeError: array_intersect(): Argument #1 ($array) must be of type array, string given in /vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:4623
Stack trace:
#0 /vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php(4623): array_intersect()
#1 FTPTools.php(105): phpseclib3\Net\SSH2->setPreferredAlgorithms()
#2 Reporter.php(1247): FTPTools->login()
#3 run_rebot.php(60): Reporter->myfunction()
#4 {main}
  thrown in /vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php on line 4623

我尝试更新我的服务器。我尝试重新安装 phpseclib。都不起作用。

php phpseclib
1个回答
2
投票

你正在这样做:

$sftp->setPreferredAlgorithms(['hostkey' => 'ssh-dss']);

当你应该这样做时:

$sftp->setPreferredAlgorithms(['hostkey' => ['ssh-dss']]);
© www.soinside.com 2019 - 2024. All rights reserved.