You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ssh2_connect连接服务器失败,密钥交换错误求助

问题分析与解决办法

从服务器日志和PHP报错来看,核心问题是SSH密钥算法不匹配:你的PHP ssh2扩展默认只提供ssh-rsa、ssh-dss这类旧版主机密钥算法,但远程服务器已禁用这些不安全的算法,导致双方无法协商出可用的加密方式,连接失败。

解决步骤

1. 修改ssh2_connect参数,指定兼容的密钥算法

在ssh2_connect的第三个参数中添加hostkey选项,指定服务器支持的现代密钥算法(比如rsa-sha2-256、rsa-sha2-512,是当前主流服务器普遍支持的类型)。同时修正代码中直接输出流资源的问题:

$connection = ssh2_connect('IP_ADDRESS', 22, [
    'hostkey' => 'rsa-sha2-256,rsa-sha2-512,ssh-rsa'
]);

if (!$connection) {
    die('远程服务器连接失败');
}

// 密码认证
if (!ssh2_auth_password($connection, 'user', 'pass')) {
    die('账号密码验证失败');
}

// 执行命令并读取结果
$stream = ssh2_exec($connection, 'ls');
stream_set_blocking($stream, true); // 设置阻塞模式确保读取完整内容
$output = stream_get_contents($stream);
echo $output;

// 关闭流资源
fclose($stream);

2. 确认服务器支持的密钥算法

如果上述代码仍报错,可通过本地终端的ssh命令查看服务器支持的算法:

ssh -v user@IP_ADDRESS

在输出中找到debug1: host key algorithms:字段,将对应的算法添加到代码的hostkey参数中即可。

3. 升级ssh2扩展(可选)

若你的PHP ssh2扩展版本过旧,可能本身不支持新密钥算法,可尝试通过PECL重新安装最新版:

pecl install ssh2

内容的提问来源于stack exchange,提问作者Yamile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:15:51