南大通用GBase 8a在openssh 8.5p1版本sftp加载报Failed initialization错误原因和解决方案

在升级到openssh 8.5 版本后,由于其不再支持sha-1加密算法,导致一些老板本的GBase 8a集群在使用sftp加载时,报 ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: I/O operation on sftp://XXXX failed with error - Failed initialization,需要升级数据库到支持sha256的版本。

参考

redhat7 升级openssh 8.5 p1手顺

GBase 8a在用过sftp加载时,由于sha256原因导致报错 ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: I/O operation on sftp failed with error – Failed initialization, File name

GBase 8a数据库支持sha256用户密码加密的功能gbase_caching_sha2_password

报错样例

升级openssh8.5p1后,采用sftp加载时报如下错误:
gbase> load data infile 'sftp://gbase:gbase@192.168.56.123/home/gbase/1.txt' into table aaadata_format 3 fields terminated by '|';
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: I/O operation on sftp://gbase:*****@192.168.56.123/home/gbase/1.txt failed with error - Failed initialization, File name sftp://gbase:*****@192.168.56.123/home/gbase/1.txt

原因

OpenSSH组件自8.5版本后终止对SHA-1散列算法的支持,原因为:

SHA-1散列算法中存在的安全问题,被业内认为是不安全的。该算法在2017年2月被谷歌密码学专家破解,可利用SHAttered技术将两个不同文件拥有相同的SHA-1文件签名。

不过当时创建一个SHA-1碰撞被认为需要非常昂贵的计算成本,因此谷歌专家认为SHA-1在实际生活中至少还需要等待半年的时间,直到成本进一步下降。随后在在2019年5月和2020年1月发布的研究报告中,详细介绍了一种更新的方法,将SHA-1选择-前缀碰撞攻击的成本分别降低到11万美元和5万美元以下。

鉴于对该算法当前情况下破解的成本,OpenSSH自8.5版本后终止了对SHA-1散列算法的支持。具体详见OpenSSH官网发布的8.5版本release_note:https://www.openssh.com/txt/release-8.5

由于gbase8a早期版本中在代码中静态编译了较早版本的libcurl库和libssh2库,支持更高安全性加密算法SHA256的libcurl库和libssh2库需要较新版本,因此早期版本的gbase 8a在升级OpenSSH8.5p1后会出现sftp加载报错的问题,原因是引用库的加密算法和sshd-server支持的算法不匹配。

验证方法

指定认证方法为ssh-rsa,如果能正常连接,那就是对面还没有移除sha1。

ssh -oHostKeyAlgorithms=ssh-rsa user@host

解决办法

升级数据库版本

可以通过升级GBase 8a数据库版本解决sftp加载报错问题,在较新版本的GBase 8a版本中已经更新了引用的libcurl和libssh库,支持SHA256加密算法。

可升级解决该问题的版本包括如下:

大版本具体版本
V8.6.2_build338.6.2_build33-R43.126996 版本及以上
V8.6.2_build438.6.2_build43-R30 版本及以上
V9.5.29.5.2.33 版本及以上

临时规避

暂时将sftp协议方式更改为ftp协议方式加载可暂时绕过该问题。

其它

由于升级OpenSSH8.5P1后升级了原有加密算法,因此采用SSL加密的协议均可能收到升级影响,如hadoop加载或者导出使用了kerberos认证,采用https(gbase_hdfs_protocol参数配置为https)协议则会受到升级后影响,也需要通过升级集群版本解决。