由于全网安全检查需要,要对项目中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. wordpress使用七牛云加速

    一.准备工作. wordpress搭建的网站 七牛云账号 二.简要步骤 1.wordpress安装七牛云插件. WordPress七牛镜像存储插件已经被WordPress官方收录,可以直接在wordp ...

  2. mongodb的搭建

    1,    vi /etc/yum.repos.d/mongodb-org-3.2.repo     2,   添加如下内容   [mongodb-org-3.2] name=MongoDB Repo ...

  3. mysql中删除同一行会经常出现死锁?太可怕了

    之前有一个同事问到我,为什么多个线程同时去做删除同一行数据的操作,老是报死锁,在线上已经出现好多次了,我问了他几个问题:   1. 是不是在一个事务中做了好几件事情?      答:不是,只做一个删除 ...

  4. SQL Server 全文索引的硬伤(转载)

    本文关键字:SQL Server全文索引.CONTAINS.FREETEXT.CONTAINSTABLE.FREETEXTTABLE等谓词. 想象这样一个场景:在DataBase_name.dbo.T ...

  5. MSSQL在线文件还原脚本

    在线文件还原:如果比较大的MSSQL数据库的损坏只是集中在其中某一个文件或者文件组上,使用在线文件还原技术,只是把坏掉的数据文件或者文件组重建,能节约很多时间.以下是测试脚本(假设损坏的文件时Trn0 ...

  6. 参观阿拉斯加进行产品培训[My representation]

    I  suggest to visit Alaska for product training. Alaska is one of the best places to spend a trainin ...

  7. 【转】Java学习---内存泄露与溢出的区别

    Java内存泄露与溢出的区别 Java内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(内存资源耗尽): 而Java内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于 ...

  8. 【转】Spring学习---SpringIOC容器的初始化过程

    [原文]https://www.toutiao.com/i6594400249429623304/ SpringIOC容器的初始化过程 简单来说,IoC容器的初始化是由refresh()方法来启动的, ...

  9. Linux运维之——每日小技巧,谈进程与线程的区别

    线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源. ...

  10. Orange Pi 3 GPIO 笔记

    这是我写过的最水的文章 设备:Orange pi H6,Pi 3 引脚图: (使用Wiringpi 查看GPIO) +------+-----+----------+------+---+Orange ...