【问题标题】:Unable to exchange encryption keys无法交换加密密钥
【发布时间】:2018-02-03 13:13:48
【问题描述】:

我现在面临一个难题,我没有在网上找到任何可以帮助我的东西。

我想通过 SSH 从我的服务器连接到另一台服务器以发送指令(第二台服务器管理 Wi-Fi 授权)。

据我所知,我认为问题的发生是因为我们更新了一台服务器。 (我不确定问题是否因此而出现)。

我来自 Windows 服务器,我想调用 Linux 服务器。

这是脚本:

function executeCommand($command) {
    $infoConnection = getInfoConnection();

    $out = '';
    //The Warning occurs here, impossible to go further
    $connection = ssh2_connect($infoConnection["hostname"], 22);

    if ($connection === false) {
        $error = error_get_last();
        throw new Exception("
        Error Type : ".$error["type"]."<br/>
        Message : ".$error["message"]."<br/>
        File : ".$error["file"]."<br/>
        Line : ".$error["line"]."<br/>");
    }

    ssh2_auth_password($connection, $infoConnection["username"], $infoConnection["password"]);

    $stdio_stream = ssh2_shell($connection);
    sleep(2);
    fwrite($stdio_stream,$infoConnection["username"]."\n");
    sleep(1);
    fwrite($stdio_stream,$infoConnection["password"]."\n");
    sleep(1);

    fwrite($stdio_stream, $command."\n");
    sleep(1);
    while($buffer = fgets($stdio_stream)) {

        $out .= $buffer;
    }
    fwrite($stdio_stream, 'exit');
    unset($connection);

    return $out;
}

这是警告:

警告:ssh2_connect() [function.ssh2-connect]:启动 SSH 连接时出错 (-5):无法在 ../aff_wifi.php 中的第 203 行交换加密密钥

第 203 行是这一行:

$connection = ssh2_connect($infoConnection["hostname"], 22);

当我“抓住”警告时,我有这个:

错误类型:2 消息:ssh2_connect() [function.ssh2-connect]: 无法连接到 ipAdress 文件:..\aff_wifi.php 线路:203

您知道为什么会发生这种情况吗? 当我尝试使用 PuTTY 从我的服务器连接到另一台服务器时,一切正常

祝你有美好的一天!

【问题讨论】:

  • 你在服务器上运行什么版本的 ssh?如果是 v1,请升​​级。见:bugs.php.net/bug.php?id=57062
  • 我用的是0.11版本(SSH-2.0-libssh2_0.11)
  • 版本 0.11 可以追溯到 2008 年 12 月 pecl.php.net/package/ssh2,我建议更新。在 linux 服务器上运行 ssh -V 并查看它是否安装了 ssh 的最新版本。如果没有,也要更新。 SSH 版本 1 存在严重的安全风险。
  • Windows服务器上PHP的版本还是5.1.6。我可以更新 libssh 吗?库和php版本是否存在兼容性问题?
  • pecl.php.net/package/ssh2/0.13 ssh2 1.0 及更高版本仅适用于 PHP 7。要安装与 PHP 5 兼容的版本,您可以运行“pecl install ssh2-0.13”,这表明您应该能够将 0.13 与任何 PHP5 版本一起使用。但保留当前的 ​​DLL 以防万一它不起作用

标签: php linux windows ssh ssh-keys


【解决方案1】:

我在尝试通过 ssh2_connect 从一个有点旧的 xenial 访问一个焦点 ubuntu 服务器时遇到了这个问题。解决方案是更新 libssh2-1。即使php显示旧版本,它也可以正常工作。

在xenial中,我添加了focal repository,然后安装了最新版本的libssh2-1,重新启动php申请并删除了focal repository。

sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse"
sudo apt-get update
sudo apt -y install libssh2-1
sudo add-apt-repository -r "deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse"
sudo apt-get update

【讨论】:

  • 我花了好几个小时,但我终于找到了你的评论,这就是我的问题的解决方案,因为我知道一旦我阅读它就会解决,但我永远不会猜到。非常感谢您发表此评论!!我欠你一杯啤酒!
  • 这解决了我的问题。 @pdropi 您能否格式化您的答案,以便更清楚地理解不同的步骤?
【解决方案2】:

警告:ssh2_connect() [function.ssh2-connect]:启动 SSH 连接时出错 (-5):无法在 ../aff_wifi.php 中的第 203 行交换加密密钥

libssh2 0.x 仅支持基于 Diffie-Hellman SHA1 的密钥交换。 OpenSSH 默认禁用了 DH SHA1。这让 libssh2 0.x 变得又高又干。

选项 1:更新 libssh2

libssh2 1.7 及更高版本支持 DH SHA256 和 ECDH 密钥交换。这些将适用于最新的 OpenSSH。 1.x 版本需要 PHP 7。

选项 2:使用 phpseclib

如果您卡在 PHP 5 上,那么 libssh2 将无法使用。 PHP5 可用的最高版本是 libssh2 0.13,它仍然只支持 SHA1 密钥交换。另一个对我有用的库是phpseclib。它支持 diffie-hellman-group-exchange-sha256,我能够连接到更新的 OpenSSH 服务器。

【讨论】:

    【解决方案3】:

    如果您有权访问 SSH 服务器,并且 SSH 服务器在 Linux 系统上运行,则 /var/log/messages/var/log/secure Linux 系统上的日志可能包含有助于确定返回“无法交换加密密钥”的原因的事件。例如,/var/log/secure 日志可能有这样的内容。

    Jan 29 07:02:46 docker1 sshd[3245780]: Unable to negotiate with 192.168.0.15 port 55736: no matching host key type found. Their offer: ssh-rsa,ssh-dss [preauth]
    

    请注意,在此示例中,/var/log/secure 日志将“未找到匹配的主机密钥类型”捕获为潜在问题。默认情况下,PHP ssh2_connection 函数提供以下主机密钥类型。

    • ssh-rsa
    • ssh-dss

    如果 SSH 服务器不接受 ssh-rsa 或 ssh-dss 作为主机密钥类型,那么 /var/log/secure 日志将捕获类似“找不到匹配的主机密钥类型”的内容,并且 PHP 应该记录“无法交换加密密钥”。在这种情况下,需要更新 SSH 服务器以接受 ssh-rsa 或 ssh-dss 主机密钥类型。

    例如,如果 SSH 服务器是 OpenSSH,这可能意味着将 ssh-rsa 和 ssh-dss 附加到 /etc/crypto-policies/back-ends/opensshserver.config 中的 HostKeyAlgorithms 行 在 OpenSSH Linux 系统上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-02
      • 2012-05-06
      • 2012-05-08
      • 2011-07-11
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多