由于全网安全检查需要,要对项目中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. 多个div中的label标签对齐

    这是之前的页面效果: 添加红色部门的代码后: <head> <meta name="viewport" content="width=device-wi ...

  2. windows10移动热点打开后手机不能上网

    电脑的win10操作系统自带有移动热点功能,可以共享上网,类似于手机的热点功能.今天在共享时遇到一些问题,现在解决了分享一下. 如果本身电脑无法上网,即wlan上网功能无效,有可能是驱动不兼容,可以在 ...

  3. Skype 服务器客户端策略参数优化

    1.skype通讯录原理 对于skype客户端的通讯录同步,首先说说原理,通讯簿信息是从AD同步的skype前端服务器(每天1:30),在从前端服务器同步的客户端(大概1小时内同步一次). skype ...

  4. Linux每日小技巧---ss命令

    ss命令 ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连 ...

  5. laravel上传图片报错

    在laravel的上传图片代码文件中路径如下: vendor\stevenyangecho\laravel-u-editor\src\Uploader\Upload.php第131行有一句代码错误$r ...

  6. SDN 第四次上机作业

    1.建立以下拓扑,并连接上ODL控制器. 2.利用ODL下发流表,使得h3在10s内ping不通h1,10s后恢复. 3.借助Postman通过ODL的北向接口下发流表,再利用ODL北向接口查看已下发 ...

  7. 启动android monitor报错解决办法

    再这汇总一下这段时间使用android monitor新遇到的问题,特汇总对应问题解决办法如下: 1.确保JDK和Android studio位数相同,比如JDK使用的是64位,studio也要是64 ...

  8. [python]通过uiautomator实现返回当前程序包名

    # -*- coding: utf-8 -*- from uiautomator import device as d def getCurrentPackageName(): info = d.in ...

  9. Centos7 Nginx 开机启动

    Centos 系统服务脚本目录: 用户(user) 用户登录后才能运行的程序,存在用户(user) /usr/lib/systemd/ 系统(system) 如需要开机没有登陆情况下就能运行的程序,存 ...

  10. 难度并不NOIP的NOIP模拟赛

    今天老师请了前几届的学长来讲课,可是讲课为什么要考试呢... 学长说难度是NOIP,于是我就naive的跟着参加了,然而T3难度并不友好,感觉确实不是很适合我们现在做......不过课本来也不是给我们 ...