无法交换加密密钥

时间:2017-08-25 13:08:30

标签: php linux windows ssh ssh-keys

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

我想通过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):无法在第203行的../aff_wifi.php中交换加密密钥

第203行是这一行:

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

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

  

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

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

祝你有个美好的一天!

2 个答案:

答案 0 :(得分:2)

当我尝试通过ssh2_connect从一个稍旧的xenial访问焦点ubuntu服务器时遇到了这个问题。解决方案是更新libssh2-1。即使php显示了旧版本,它也能正常工作。 在xenial中,我添加了焦点存储库(deb http://archive.ubuntu.com/ubuntu/焦点主要受限宇宙多重宇宙) ,在文件/etc/apt/sources.list中 然后 apt更新 apt安装libssh2-1

重新启动php以应用 删除焦点存储库并更新apt

答案 1 :(得分:1)

Warning: ssh2_connect() [function.ssh2-connect]: Error starting up SSH connection(-5): Unable to exchange encryption keys in ../aff_wifi.php on line 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服务器。