无法交换加密密钥
Unable to exchange encryption 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;
}
这是警告:
Warning: ssh2_connect() [function.ssh2-connect]: Error starting up SSH connection(-5): Unable to exchange encryption keys in ../aff_wifi.php on line 203
第 203 行是这一行:
$connection = ssh2_connect($infoConnection["hostname"], 22);
当我 "catch" 警告时,我有这个:
Error type : 2 Message : ssh2_connect() [function.ssh2-connect]:
Unable to connect to ipAdress
File: ..\aff_wifi.php
Line: 203
你知道为什么会这样吗?
当我尝试使用 PuTTY 从我的服务器连接到另一台服务器时,一切正常
祝你有个愉快的一天!
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 服务器。
我在尝试通过 ssh2_connect 从一个有点老的 xenial 访问焦点 ubuntu 服务器时遇到了这个问题。解决方案是更新 libssh2-1。即使 php 显示旧版本,它也能正常工作。
在 xenial 中,我添加了焦点存储库,然后安装了最新版本的 libssh2-1,重新启动PHP 以应用并删除了焦点存储库。
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
如果您有权访问 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 行25=] 在 OpenSSH Linux 系统上。
我现在遇到了一个难题,我在网上找不到任何可以帮助我的东西。
我想通过 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;
}
这是警告:
Warning: ssh2_connect() [function.ssh2-connect]: Error starting up SSH connection(-5): Unable to exchange encryption keys in ../aff_wifi.php on line 203
第 203 行是这一行:
$connection = ssh2_connect($infoConnection["hostname"], 22);
当我 "catch" 警告时,我有这个:
Error type : 2 Message : ssh2_connect() [function.ssh2-connect]: Unable to connect to ipAdress File: ..\aff_wifi.php Line: 203
你知道为什么会这样吗? 当我尝试使用 PuTTY 从我的服务器连接到另一台服务器时,一切正常
祝你有个愉快的一天!
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 服务器。
我在尝试通过 ssh2_connect 从一个有点老的 xenial 访问焦点 ubuntu 服务器时遇到了这个问题。解决方案是更新 libssh2-1。即使 php 显示旧版本,它也能正常工作。
在 xenial 中,我添加了焦点存储库,然后安装了最新版本的 libssh2-1,重新启动PHP 以应用并删除了焦点存储库。
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
如果您有权访问 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 行25=] 在 OpenSSH Linux 系统上。