文章目录

  • 前言
  • 一、问题描述
  • 二、原因分析
  • 三、解决方案
  • 总结

前言

近期在做信创工作,运维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问题解决过程相关推荐

  1. 【大数据开发运维解决方案】sqoop避免输入密码自动增量job脚本介绍

    上一篇文章介绍了sqoop增量同步数据到hive,同时上一篇文章也给出了本人写的hadoop+hive+hbase+sqoop+kylin的伪分布式安装方法及使用和增量同步实现的连接,上篇文章连接:S ...

  2. 【大数据开发运维解决方案】ogg(GoldenGate)三大进程常用参数

    ============================================1.管理进程 oggCI (ogg1) 22> edit params mgr PORT 7809 DYN ...

  3. 【大数据开发运维解决方案】Oracle Sql基础查询

    1.查找空值 null不支持加.减.乘.除.大小比较.相等比较,否则结果只能为空. SQL> select * from dept where 1>=null;DEPTNO DNAME L ...

  4. 【大数据开发运维解决方案】Solr5.1+Jcseg分词器安装部署(中英文同义词、停止词配置)

    Solr5.1+Jcseg分词器安装部署(同义词.停止词) ###################################################################### ...

  5. 【大数据开发运维解决方案】超级详细的VMware16安装Redhat8挂载镜像配置本地yum源安装unixODBC教程

    文章目录 前言 一.安装配置VMware 1.虚拟网络配置 2.修改windows网卡配置 二.安装RedHat8.6 1.虚拟机安装 1.1.新建虚拟机 1.2.接下来选择 稍候安装操作系统,下一步 ...

  6. 【大数据开发运维解决方案】hadoop fs常用命令案例解释

    文章目录 前言 一.hadoop fs常用命令参数列表 二.案例展示 hadoop fs -mkdir hadoop fs -ls hadoop fs -put hadoop fs -get hado ...

  7. 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 ...

  8. 阿里,B站小伙伴刚刚分享的大数据开发运维学习规划,抓紧收藏

    一.大数据运维相关答疑与概述 1.0 Class介绍 本课程是专门培养大数据运维与架构方向专业人才的体系化课程.课程所有讲师小伙伴全部是在职的知名企业大数据开发专家,大数据技术专家职位员工,非专门的培 ...

  9. 为什么数据科学家需要承担开发运维的工作?

    作者 | Caleb Kaiser 译者 | 弯月,责编 | 夕颜 头图 | CSDN下载自视觉中国 出品 | CSDN(ID:CSDNnews) 以下为译文: 如果你需要创建一个生产环境下的机器学习 ...

最新文章

  1. HanLP-最短路径分词
  2. 【开源】Winform甘特日程控件GanttPlanner V1.0发布
  3. FLANN特征匹配(Python)
  4. 当内容超出最大的长度的时候,使用CSS使文本显示省略号
  5. php答题评分,Thinkphp 答题 评语
  6. 常用的函数式接口_Predicate接口_默认方法and
  7. 王华(1985-),男,中国人民大学硕士生
  8. 【领域综述】NLP领域,你推荐哪些综述性的文章?
  9. DSOFramer的类别和安装
  10. Verilog——计数器
  11. 2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜
  12. 骨传导式耳机推荐,2021骨传导耳机排行榜
  13. NLP自然语言处理系列-音乐推荐系统实战 -基于矩阵分解(SVD)的推荐
  14. GO运行时报错: cannot find package “.“ in:
  15. 合成资产赛道之Mirror Protocol
  16. matlab 右边短线,短线和大盘,最简单的短线选股方法
  17. Android 按钮设置边框实例
  18. HDU-4540 威威猫系列故事——打地鼠
  19. 使用STM32CubeMX配置STM32F051K8U6实验笔记
  20. 【数学建模】14 微分方程模型求解方法

热门文章

  1. itx机箱尺寸_乔思伯A4 ITX机箱评测:大容积的小钢炮
  2. java方法怎么声明_【Java方法的声明和使用】
  3. H3C路由器PPPoE拨号 IPv6地址一直显示[TENTATIVE]的故障
  4. android 锁屏界面处理
  5. 数据集【NO.8】红外海上船舶数据集
  6. HTML 水平居中 垂直居中 垂直水平居中的几种实现方式
  7. Liunx Jenkins没有overall/Read权限
  8. 怎样评价团队成员的表现
  9. Colab下Imageai自定义模型训练和目标检测
  10. MySql 5.7添加用户