Openssh升级到>=9.6版本导致sftp不兼容的解决办法

        因为要修复漏洞,所以得升级openssh,但从9.6开始,默认编译出来的openssh,无法兼容之前的sftp客户端了,大概的错误信息就是算法协商不一致。

        解决办法其实也简单,就2步:

        1. 编译的时候,需要打开依赖openssl的开关。至于为什么要在9.6及之后的版本默认关闭openssl依赖,我也没细究了,能解决问题就已经快哭出来了,😄

        2. 修改/etc/ssh/sshd_config配置文件,增加如下配置:

HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa

        喜欢折腾的心让我想知道为什么这个问题和是否自带openssl有关系,于是开始了下面的探索之旅。

先来看一个安装openssh时自带openssl和没带openssl的版本信息对比 :

自带openssl:

不带openssl:

尝试一下,使用不带openssl的版本安装,并修改上面第二步提到的sshd_config的配置,然后重启sshd,则会看到如下错误:

 画线的地方提示ssh-rsa是Bad key types,说明sshd程序无法识别该算法。

接下来看openssh的源码, 先看rpm包的打包描述文件openss.spec,通过对比版本记录,自9.6开始,增加了是否编译openssl的参数,如下图:

在<=9.5的版本,是会强制编译openssl。而在>=9.6的版本,则是通过without_openssl参数控制,without_openssl的定义如下: 

假如我们的编译环境是Fedora/Centos7,那么编出来的版本默认不携带openssl。

通过在Centos7和龙蜥上打包时,可以看到控制台执行的命令也有所不同。

Centos7:

Anolis(龙蜥):

从上面的对比也可以看到,执行./configure命令时,Centos7会携带—without-openssl参数。

根据报错信息,我们再细挖一点,找到ssh-rsa.c源码,发现在源码的开头定义了#ifdef WITH_OPENSSL标志,指定的范围直到代码结尾,具体如下图:

 

上述代码进行了简化, 至此,证据应该是差不多了,就到折腾到这里吧。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值