【大数据开发运维解决方案】ssh: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b问题解决过程
文章目录
- 前言
- 一、问题描述
- 二、原因分析
- 三、解决方案
- 总结
前言
近期在做信创工作,运维Informatica的同事,在之前我为他做了个华为fusioninsight集群内节点与其Informatica服务器的infa用户的ssh免密通信。近期Informatica要对接Gaussdb。
一、问题描述
运维Informatica的同事,在之前我为他做了个华为fusioninsight集群内节点与其Informatica服务器的infa用户的ssh免密通信。近期Informatica要对接Gaussdb。他在infa用户下创建了用来放Gaussdb的动态库 文件/home/infa/gaussdb/lib目录,但是在.bashrc文件中增加相关LD_LIBRARY_PATH配置后,再次执行ssh命令报下面错误:
[infa@etltest5 ~]$ ssh
ssh: symbol lookup error: ssh: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b
二、原因分析
在同事给我反馈问题后,我登录服务器后先看了下其.bashrc文件环境变量配置如下:
export PATH=$PATH:/usr/local/oracle/instantclient_11_2
export ORACLE_HOME=/usr/local/oracle/instantclient_11_2
export ORACLE_BASE=/usr/local/oracle/instantclient_11_2
export LD_LIBRARY_PATH=/usr/local/oracle/instantclient_11_2
export TNS_ADMIN=/usr/local/oracle/instantclient_11_2
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
export INFA_CODEPAGENAME=MS936
export PM_CODEPAGENAME=MS936
export LANG=C
export LC_ALL=C
export LD_LIBRARY_PATH=/usr/local/oracle/instantclient_11_2:/home/infa/gaussdb/lib:$LD_LIBRARY_PATH
export INFA_HOME=/home/infa/Informatica/10.2.0
export ODBCHOME=/home/infa/Informatica/10.2.0/ODBC7.1
export LIB_PATH=$LIB_PATH:$ODBCHOME/lib
export SHLIB_PATH=$SHLIB_PATH:$ODBCHOME/lib
export PATH=$PATH:$ODBCHOME/bin:$ODBCHOME/tools:$INFA_HOME/server/bin
export ODBCINI=$ODBCHOME/odbc.ini
export ODBCINST=$ODBCHOME/odbcinst.ini
export DD_INSTALLDIR=/home/infa/Informatica/10.2.0/ODBC7.1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ODBCHOME/lib:$INFA_HOME/server/bin
起码看着配置文件中的环境变量配置没有问题,于是手动执行ssh命令:
[infa@etltest5 ~]$ source .bashrc
[infa@etltest5 ~]$ ssh
ssh: symbol lookup error: ssh: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b
果然报错,然后我修改了其LD_LIBRARY_PATH,将/home/infa/gaussdb/lib配置给删除,然后再次执行:
[infa@etltest5 ~]$ vim .bashrc
[infa@etltest5 ~]$ source .bashrc
[infa@etltest5 ~]$ ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface][-b bind_address] [-c cipher_spec] [-D [bind_address:]port][-E log_file] [-e escape_char] [-F configfile] [-I pkcs11][-i identity_file] [-J [user@]host[:port]] [-L address][-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port][-Q query_option] [-R address] [-S ctl_path] [-W host:port][-w local_tun[:remote_tun]] destination [command]
这次执行ssh命令是可以正常的,根据上面简单测试,我猜测出现此问题的可能性是因为指定/home/infa/gaussdb/lib动态库文件后,/usr/bin/ssh的动态库文件在/usr/bin/ssh执行的时候被指定错了而不是缺少,因为前面测试了去掉此库路径配置是正常的!
那怎么看ssh的动态库是否指定正确呢?
这里介绍一个命令ldd。在linux中, ldd是list, dynamic, dependencies的缩写, 意思是:列出动态库依赖关系。各位可以用ldd –help或者man ldd来看其用法。我这里就不列详细用法了~
现在先来看下正常情况下/usr/bin/ssh的动态库引用:
[infa@etltest5 ~]$ ldd /usr/bin/sshlinux-vdso.so.1 (0x00007ffc5b1f9000)libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007fa46d15f000)libdl.so.2 => /lib64/libdl.so.2 (0x00007fa46cf5b000)libutil.so.1 => /lib64/libutil.so.1 (0x00007fa46cd57000)libz.so.1 => /lib64/libz.so.1 (0x00007fa46cb3f000)libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fa46c916000)libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fa46c6ff000)libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fa46c4d5000)libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fa46c280000)libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fa46bf96000)libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fa46bd7f000)libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fa46bb7b000)libc.so.6 => /lib64/libc.so.6 (0x00007fa46b7b6000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa46b596000)/lib64/ld-linux-x86-64.so.2 (0x00007fa46d906000)libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fa46b312000)libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fa46b101000)libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fa46aefd000)
从上面输出结果可以看到,/usr/bin/ssh命令实际指向的都是/lib64下的库文件。
而现在报错时候的/usr/bin/ssh命令指向的文件:
[infa@etltest5 ~]$ ldd /usr/bin/sshlinux-vdso.so.1 (0x00007fffb17e4000)libcrypto.so.1.1 => /home/infa/gaussdb/lib/libcrypto.so.1.1 (0x00007f0990162000)libdl.so.2 => /lib64/libdl.so.2 (0x00007f098ff5e000)libutil.so.1 => /lib64/libutil.so.1 (0x00007f098fd5a000)libz.so.1 => /lib64/libz.so.1 (0x00007f098fb42000)libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f098f919000)libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f098f702000)libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f098f4d8000)libgssapi_krb5.so.2 => /home/infa/Informatica/10.2.0/server/bin/libgssapi_krb5.so.2 (0x00007f098f290000)libkrb5.so.3 => /home/infa/Informatica/10.2.0/server/bin/libkrb5.so.3 (0x00007f098efbd000)libk5crypto.so.3 => /home/infa/Informatica/10.2.0/server/bin/libk5crypto.so.3 (0x00007f098ed8e000)libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f098eb8a000)libc.so.6 => /lib64/libc.so.6 (0x00007f098e7c5000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f098e5a5000)/lib64/ld-linux-x86-64.so.2 (0x00007f09906df000)libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f098e321000)libcom_err.so.3 => /home/infa/Informatica/10.2.0/server/bin/libcom_err.so.3 (0x00007f098e11e000)libkrb5support.so.0 => /home/infa/Informatica/10.2.0/server/bin/libkrb5support.so.0 (0x00007f098df13000)libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f098dd0f000)
从上面输出结果可以看出,一部分指向的文件指到了/home/infa/gaussdb/lib下了,所以报错了。
三、解决方案
我这里的解决办法就是在.bashrc的最后将正确的/usr/bin/ssh的*.so文件指向的文件所在的文件夹放到LD_LIBRARY_PATH最后一次配置的最前面,例如:
export LD_LIBRARY_PATH=/lib64/:$LD_LIBRARY_PATH:$ODBCHOME/lib:$INFA_HOME/server/bin
所以,最后正确的.bashrc配置应该如下:
export PATH=$PATH:/usr/local/oracle/instantclient_11_2
export ORACLE_HOME=/usr/local/oracle/instantclient_11_2
export ORACLE_BASE=/usr/local/oracle/instantclient_11_2
export LD_LIBRARY_PATH=/usr/local/oracle/instantclient_11_2
export TNS_ADMIN=/usr/local/oracle/instantclient_11_2
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
export INFA_CODEPAGENAME=MS936
export PM_CODEPAGENAME=MS936
export LANG=C
export LC_ALL=C
#export LD_LIBRARY_PATH=/usr/local/oracle/instantclient_11_2:/home/infa/software/lib/:$LD_LIBRARY_PATH
#export LD_LIBRARY_PATH=/usr/local/oracle/instantclient_11_2:/home/infa/gaussdb/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/oracle/instantclient_11_2:/home/infa/gaussdb/lib
export INFA_HOME=/home/infa/Informatica/10.2.0
export ODBCHOME=/home/infa/Informatica/10.2.0/ODBC7.1
export LIB_PATH=$LIB_PATH:$ODBCHOME/lib
export SHLIB_PATH=$SHLIB_PATH:$ODBCHOME/lib
export PATH=$PATH:$ODBCHOME/bin:$ODBCHOME/tools:$INFA_HOME/server/bin
export ODBCINI=$ODBCHOME/odbc.ini
export ODBCINST=$ODBCHOME/odbcinst.ini
export DD_INSTALLDIR=/home/infa/Informatica/10.2.0/ODBC7.1
export LD_LIBRARY_PATH=/lib64/:$LD_LIBRARY_PATH:$ODBCHOME/lib:$INFA_HOME/server/bin
环境变量配置好后,再次执行:
[infa@etltest5 ~]$ vim .bashrc
[infa@etltest5 ~]$ source .bashrc
[infa@etltest5 ~]$ ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface][-b bind_address] [-c cipher_spec] [-D [bind_address:]port][-E log_file] [-e escape_char] [-F configfile] [-I pkcs11][-i identity_file] [-J [user@]host[:port]] [-L address][-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port][-Q query_option] [-R address] [-S ctl_path] [-W host:port][-w local_tun[:remote_tun]] destination [command]
[infa@etltest5 ~]$ ldd /usr/bin/sshlinux-vdso.so.1 (0x00007ffc5b1f9000)libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007fa46d15f000)libdl.so.2 => /lib64/libdl.so.2 (0x00007fa46cf5b000)libutil.so.1 => /lib64/libutil.so.1 (0x00007fa46cd57000)libz.so.1 => /lib64/libz.so.1 (0x00007fa46cb3f000)libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fa46c916000)libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fa46c6ff000)libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fa46c4d5000)libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fa46c280000)libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fa46bf96000)libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fa46bd7f000)libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fa46bb7b000)libc.so.6 => /lib64/libc.so.6 (0x00007fa46b7b6000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa46b596000)/lib64/ld-linux-x86-64.so.2 (0x00007fa46d906000)libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fa46b312000)libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fa46b101000)libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fa46aefd000)
可以看到,ssh命令可以正常执行,并且文件指向也都正确了。
总结
生产环境要谨慎,我没有删除/home/infa/gaussdb/lib冲突的文件,而是手动指定了查找优先级。
【大数据开发运维解决方案】ssh: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b问题解决过程相关推荐
- 【大数据开发运维解决方案】sqoop避免输入密码自动增量job脚本介绍
上一篇文章介绍了sqoop增量同步数据到hive,同时上一篇文章也给出了本人写的hadoop+hive+hbase+sqoop+kylin的伪分布式安装方法及使用和增量同步实现的连接,上篇文章连接:S ...
- 【大数据开发运维解决方案】ogg(GoldenGate)三大进程常用参数
============================================1.管理进程 oggCI (ogg1) 22> edit params mgr PORT 7809 DYN ...
- 【大数据开发运维解决方案】Oracle Sql基础查询
1.查找空值 null不支持加.减.乘.除.大小比较.相等比较,否则结果只能为空. SQL> select * from dept where 1>=null;DEPTNO DNAME L ...
- 【大数据开发运维解决方案】Solr5.1+Jcseg分词器安装部署(中英文同义词、停止词配置)
Solr5.1+Jcseg分词器安装部署(同义词.停止词) ###################################################################### ...
- 【大数据开发运维解决方案】超级详细的VMware16安装Redhat8挂载镜像配置本地yum源安装unixODBC教程
文章目录 前言 一.安装配置VMware 1.虚拟网络配置 2.修改windows网卡配置 二.安装RedHat8.6 1.虚拟机安装 1.1.新建虚拟机 1.2.接下来选择 稍候安装操作系统,下一步 ...
- 【大数据开发运维解决方案】hadoop fs常用命令案例解释
文章目录 前言 一.hadoop fs常用命令参数列表 二.案例展示 hadoop fs -mkdir hadoop fs -ls hadoop fs -put hadoop fs -get hado ...
- centos8安装dm8,动态库加载成功后导致undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b fatal: Could not read
centos8安装dm8,动态库加载成功后导致undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b fatal: Could not read ...
- 阿里,B站小伙伴刚刚分享的大数据开发运维学习规划,抓紧收藏
一.大数据运维相关答疑与概述 1.0 Class介绍 本课程是专门培养大数据运维与架构方向专业人才的体系化课程.课程所有讲师小伙伴全部是在职的知名企业大数据开发专家,大数据技术专家职位员工,非专门的培 ...
- 为什么数据科学家需要承担开发运维的工作?
作者 | Caleb Kaiser 译者 | 弯月,责编 | 夕颜 头图 | CSDN下载自视觉中国 出品 | CSDN(ID:CSDNnews) 以下为译文: 如果你需要创建一个生产环境下的机器学习 ...
最新文章
- HanLP-最短路径分词
- 【开源】Winform甘特日程控件GanttPlanner V1.0发布
- FLANN特征匹配(Python)
- 当内容超出最大的长度的时候,使用CSS使文本显示省略号
- php答题评分,Thinkphp 答题 评语
- 常用的函数式接口_Predicate接口_默认方法and
- 王华(1985-),男,中国人民大学硕士生
- 【领域综述】NLP领域,你推荐哪些综述性的文章?
- DSOFramer的类别和安装
- Verilog——计数器
- 2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜
- 骨传导式耳机推荐,2021骨传导耳机排行榜
- NLP自然语言处理系列-音乐推荐系统实战 -基于矩阵分解(SVD)的推荐
- GO运行时报错: cannot find package “.“ in:
- 合成资产赛道之Mirror Protocol
- matlab 右边短线,短线和大盘,最简单的短线选股方法
- Android 按钮设置边框实例
- HDU-4540 威威猫系列故事——打地鼠
- 使用STM32CubeMX配置STM32F051K8U6实验笔记
- 【数学建模】14 微分方程模型求解方法