因需要使用OpenSSL加密库进行开发,但是选择了高版本1.1.1,而linux环境中OpenSSL版本为1.0.2g,
所以想着干脆升级下,所以下载OpenSSL 1.1.1源码进行编译,然后安装。
照着网上的教程搞了下,很容易就实现了,终端中识别OpenSSL版本,如下:
OpenSSL version -a
参考的博客是《Ubuntu16.04安装/升级openssl到1.1版本》
但是,过了几天发现SSH不能用了,查询ssh状态,也是启动失败。想起来动过OpenSSL,所以开始想办法恢复。
百度了很久,遇到以下问题:
- error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory
- libcrypto.so.1.0.0: no version information available
- sshd:OpenSSL version mismatch. Built against 10000003, you have 100020cf
- error ssh symbol evp_aes_128_ctr
第一个好解决,路径问题,找不到so。
第二个问题,网上说需要手动写个文件,貌似是版本信息文件,我照做了,确实解决了。但是留下了疑问,为什么自己源码编译的so,SSH就老是报缺少版本信息呢???不得而知。
后面2个问题,已经记不起怎么纠结了。反正我放弃了。
OpenSSL和SSH之间也是有版本对应关系的。只能选择要么升级SSH,要么降级OpenSSL为原来的1.0.2g。我觉得还是降级OpenSSL来的更容易些。
解决办法:
其实SSH不工作的根本原因还是我照着那个博客,用高版本so替换了/lib/x86_64-linux-gnu目录下的libssl.so.xx和libcrypto.so.xx。
我在电脑虚拟机上安装了与SSH出问题环境相同版本的linux系统,然后从虚拟机中/lib/x86_64-linux-gnu目录下拷贝了以前低版本OpenSSL的libssl.so.xx和libcrypto.so.xx库,替换到问题linux环境中去。
其他什么都没改,就只替换了2个so。终端中输入ssh -V。
SSH就已经可以查到版本了,说明基本正常,然后重新启动下服务,就恢复正常了。
切记!!!不要乱替换系统库。
重要的事说三遍,别轻易替换/lib/x86_64-linux-gnu下so
重要的事说三遍,别轻易替换/lib/x86_64-linux-gnu下so
重要的事说三遍,别轻易替换/lib/x86_64-linux-gnu下so
若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!
同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。