由于全网安全检查需要,要对项目中1280台Linux系统升级SSH及openssl,其中:

OPENSSH 升级为 openssh 7.9p

下载地址: 

openssl 升级为 1.0.2o

下载地址: 

涉及的系统版本为:

rhel5 32 位、64位

rhel6 32 位、64位

rhel7 64位

openssl下对应的两个关键库文件(用多了就知道,这两个东西出问题了就该找谁):

libssl.so

libcrypto.so

准备工具:

1. openssl  编译安装包

2. ssh 安装包(已经被改造成公司自用版)

3. ansible  (批量操作软件)

前期工作:

1. 根据不同系统版本,打包为不同的 openssl 及 ssh 升级包,内部包含升级脚本

  openssl 升级命令为 :

    # tar -zxf openssl-1.0.2o.tar.gz

    # cd openssl-1.0.2o

    # make clean

    # ./config --prefix=/home/caya/openssh --shared  /*默认路径为 /usr ,为避免远古脚本无法执行,此处修改为 /home/caya/openssh  */ 

    (32位加上参数  -m32)  

    # make && make install

/*新测试,可不需要 -m32 ,包本身必须干净,别用编译过的再打包给别人编译!!!*/

  openssh 升级命令为:

    # tar -zxf openssh-7.9p1.tar.gz

    # cd openssh-7.9p1

# mv /etc/ssh /etc/ssh.bak   备份配置文件

    # vi version.h   /* 修改成你喜欢的版本号,此处可忽略*/

    # ./configure        /* 请写到一行 */

       --prefix=/home/caya/openssh            /*安装目录,默认为 /usr*/

       --sysconfdir=/home/caya/openssh/etc/ssh     /*配置文件目录,默认为 /ect/ssh */

       --with-md5-passwords       /*这个随便吧*/

       --with-ssl-dir=/home/caya/openssl   /*此处是关键!要与前面ssl安装的路径一致!*/

    # make && make install

2. 编写脚本根据系统版本分发安装包

  检测系统版本指指令为:

  dis=$(uname -a|awk '{print $3}'|awk -F 'el' '{print $2}'|awk -F '.' '{print $1}')
  bites=$(uname -a|grep x86_64|wc -l)
  ([[ $dis = 7 ]]&&[[ $bites = 1 ]] && wget ...)||
  ([[ $dis = 6 ]]&&[[ $bites = 1 ]] && wget ...)||
  ([[ $dis = 6 ]]&&[[ $bites = 0 ]] && wget ...)||
  ([[ $dis = 5 ]]&&[[ $bites = 1 ]] && wget ...)||
  ([[ $dis = 5 ]]&&[[ $bites = 0 ]] && wget ...)||
  (echo unknown system)

3. 通过 ansible 分发脚本并执行

ansible 本身实际上是逐个通过ssh执行操作的, 一旦下载文件的地址不通的话就会让后面的操作一直阻塞,

  最好下载文件的位置与ansible是同一IP 这样就能有效避免阻塞导致升级失败(顶多就是超时连不上跳到下一台机)

升级过程出现的问题:

  1. ansible 直接多条命令执行运行效果不好,特别是对变量无法有效赋值, 最后通过 copy 模块把脚本分发到服务器解决

  2. 由于ansible执行方式是根据hosts逐条通过ssh登录系统,目标系统内如果wget 无法连接源仓库的话,该主机会一直尝试连接,最终会导致后面所有主机一直等待

  3. 部分主机会提示插件问题,待后期处理

  4. ssh 编译时提示: configure: error: OpenSSL version header not found

     分析:不知道,反正装了下面那个就可以,旧版也可以不影响升级

     解决方法:yum -y install openssl-devel

升级后出现的问题:

  1. 32位系统全部升级失败,编译过程中有冗余文件提示

    解决方法:

      a.   可能是原升级包被编译过再进行打包, 执行指令 make clean 清理冗余文件

      b.   生成库文件版本不对, ./config  后添加  -m32 强制所有库文件为32位文件

  2. 升级后提示缺失 libcrypto.so 库文件

    解决方法:

      去别的同类型系统复制一个库文件并做好软连接即可

 

  3. 提示 openssl 版本不对

    分析: 实际上还是库文件目录问题,根据其环境变量优先使用就近库文件,导致库文件不匹配

    解决方法:

       1. ldd  /usr/sbin/sshd    检查库文件目录:

          linux-vdso.so.1 => (0x00007fff56a7d000)
          libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00002b876b7ef000)
          librt.so.1 => /lib64/librt.so.1 (0x00002b876bbb5000)
          libdl.so.2 => /lib64/libdl.so.2 (0x00002b876bdbf000)
          libutil.so.1 => /lib64/libutil.so.1 (0x00002b876bfc3000)
          libz.so.1 => /lib64/libz.so.1 (0x00002b876c1c6000)
          libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002b876c3db000)

       2. 明显 libcrypto.so.1.0.0 位置与其他库文件不同,环境变量的锅

          mv /usr/local/ssl/lib /usr/local/ssl/lib.bak      封了那个搞事的库

       3. service sshd restart    提示成功!

  

  4. ssh 重启提示: /usr/lib64/libcrypto.so.10: no version information available 

    分析: /usr/lib64/libcrypto.so.10  软连接到不合适的 libcrypto.so.1.0.0文件去了

    解决方法: 重新编译openssh

总结:

  单独升级openssh或者openssl出现问题会比较多,这一般是早期配置环境的人使用非默认位置导致的 

  最好的解决方法是两个一起编译安装,熟悉了目录规则之后就知道怎么在不重新编译的情况下解决库的问题了。

  熟用ldd是非常好的。     

更新:

  动态库库的管理工具为: ldconfig, 及其配置文件:/etc/ld.so.conf

  ldconfig   //更新动态库

     ldconfig -p   //打印出所有关联库的位置

  因此,如果不想多余的动态库被连接,可以通过修改/etc/ld.so.conf解决

openssh7.9 升级笔记的更多相关文章

  1. T410升级笔记

      T410 win7 旗舰版 32 sp1 三星  DDR3 1066 mhz core i5 M 540 2.53GHZ 双核 日立 HTS725032A9A364 320G/7200转/分 sa ...

  2. element-ui升级笔记;echarts图表100px问题

    1.element-ui的2.7以后的版本支持树形table结构的数据,考虑优化一下表格,就升级了,但是升级到最新的版本2.12发现table都出不来了,于是降级到2.7.目前功能正常,2.12的bu ...

  3. Android的Eclipse升级笔记

    Eclipse优化: 1.可以删除的插件有: EGit CVS Mylyn cdt 1.不用多次加载布局容器的版本: ADT-22.3.0 adt-bundle-windows-x86-2013103 ...

  4. Jvm 10 升级笔记

    移除了 JPEGCodec https://www.cnblogs.com/liaolongjun/p/6878359.html

  5. do-release-upgrade升级笔记

    事后的总结: 后来可能因为阿里云镜像并不是完全底层无关镜像,do-release-upgrade后的18.04版本在经过一次异常的内核版本升级以后,restart失败,因为是虚机还很难处理,不得不直接 ...

  6. Drupal 7.23版本升级笔记

    转载请注明出处:http://blog.csdn.net/panjunbiao/article/details/9860849 今天将尝试将Drupal网站从7.22升级到7.23,下面是升级笔记. ...

  7. centos6.5升级openssh至7.9p1

    环境说明系统环境:centos 6.5 x64 openssh-5.3p1升级原因:低版本openssh存在漏洞升级目标:openssh-7.9p1 检查环境官方文档中提到的先决条件openssh安装 ...

  8. openssh升级

    转载:(感谢作者) centos7 升级openssh到openssh-8.0p1版本 https://www.cnblogs.com/nmap/p/10779658.html centos 7 op ...

  9. Centos MySQL 5.7安装、升级教程

    MySQL 5.7安装.升级笔记分享: 卸载当前的 MySQL 查看当前 MySQL 版本: ? 1 2 [root@coderknock ~]# mysql -V mysql Ver 14.14 D ...

随机推荐

  1. 《SQL Server 2008从入门到精通》--20180723

    目录 1.架构 1.1.创建架构并在架构中创建表 1.2.删除架构 1.3.修改表的架构 2.视图 2.1.新建视图 2.2.使用视图修改数据 2.3.删除视图 3.索引 3.1.聚集索引 3.2.非 ...

  2. Linux load average负载量分析与解决思路

    一.load average top命令中load average显示的是最近1分钟.5分钟和15分钟的系统平均负载.系统平均负载表示 系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或 ...

  3. centos7 安装 jdk1.8

    首先是Linux的不同版本的额系统自带的配置是不一样的,比如centos6上有的自带的jdk环境的话要装1.8的就要进行卸载或者马上进行更改 jdk是java程序依赖的环境 首先查看你的系统下是否有j ...

  4. 实现一个协程版mysql连接池

    实现一个协程版的mysql连接池,该连接池支持自动创建最小连接数,自动检测mysql健康:基于swoole的chanel. 最近事情忙,心态也有点不积极.技术倒是没有落下,只是越来越不想写博客了.想到 ...

  5. sql注入--基础

    什么是sql注入: 利用SQL语句 在外部 对数据库进行 查询,更新等 动作 sql注入的原理: 输入值可控且带入数据库执行(前提) 接受的变量传值未进行过滤(实质) sql注入的目的: 获取数据(网 ...

  6. Django基础与组件

    第一章:Django系列之web应用与http协议 第二章:基于wsgiref模块DIY一个web框架 第三章:Django下载与简介 第四章:url控制系统 第五章:视图 第六章:Django模板语 ...

  7. SDOI 2018 R2 游记

    一篇真正的“游记”. DAY -3 下午: 今天老师批准了我去省选划水的请假要求. 批准之后感觉学习非常有动力,顺便忽悠别的同学和我一起去,然而wzx是唯一一个表示可以考虑一下的同学,其他同学直接一口 ...

  8. [C++] set与multiset的常用函数

    参考资料:[C++ STL]Set和Multiset set 与 multiset set不允许重复 multiset允许重复 例: set : 1 2 3 4 5 6 multiset : 1 2 ...

  9. P3324 [SDOI2015]星际战争

    传送门:https://www.luogu.org/problemnew/show/P3324 首先瞅一眼数据范围,发现m, n都很小,所以就可以初步断定这是一道网络流的题. 因为题中说每一个武器只能 ...

  10. PHP中全局变量global和$GLOBALS[]的区别分析

    $GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针     一.举例比较 例一: 复制代码 代码如下: <?php $var1 = 1; ...