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

如何在PHP Curl中指定KexAlgorithms与Ciphers实现SFTP连接

如何在PHP Curl中指定SFTP的KexAlgorithms和Ciphers?

问题背景

在CentOS终端执行以下SFTP命令可成功连接服务器:

sftp -o KexAlgorithms=diffie-hellman-group1-sha1 -o Ciphers=aes256-cbc USER_NAME@IP_ADDRESS

但使用PHP Curl实现时,仅配置了CURLOPT_SSL_CIPHER_LIST:

curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'ECDHE-ECDSA-AES128-SHA'); 

返回错误:

Failure establishing ssh session

解决方案

PHP Curl中用于SFTP的SSH相关算法配置和HTTPS的SSL cipher是不同的,需要使用专门的SSH选项:

  1. 指定密钥交换算法:使用CURLOPT_SSH_KEX_ALGS对应终端的KexAlgorithms
  2. 指定加密算法:使用CURLOPT_SSH_CIPHERS对应终端的Ciphers

正确的完整示例代码:

// 初始化SFTP连接的Curl会话
$ch = curl_init('sftp://USER_NAME@IP_ADDRESS');

// 设置密钥交换算法,与终端命令一致
curl_setopt($ch, CURLOPT_SSH_KEX_ALGS, 'diffie-hellman-group1-sha1');
// 设置加密算法,与终端命令一致
curl_setopt($ch, CURLOPT_SSH_CIPHERS, 'aes256-cbc');

// 配置认证信息(密码或密钥二选一)
// 密码认证
curl_setopt($ch, CURLOPT_USERPWD, 'USER_NAME:YOUR_PASSWORD');
// 密钥认证(如果需要)
// curl_setopt($ch, CURLOPT_SSH_PRIVATE_KEYFILE, '/path/to/private_key');

// 配置返回结果而非直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 执行连接并处理结果
$result = curl_exec($ch);
if ($result === false) {
    echo '连接失败: ' . curl_error($ch);
} else {
    echo 'SFTP连接成功';
}

// 关闭Curl会话
curl_close($ch);

注意事项

  • 需确保PHP的Curl扩展版本对应Curl 7.73.0及以上,因为CURLOPT_SSH_KEX_ALGS和CURLOPT_SSH_CIPHERS是该版本后新增的选项。
  • 不要混淆CURLOPT_SSL_CIPHER_LIST,该选项仅用于HTTPS协议的SSL加密套件,和SFTP的SSH加密无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:40:31