由于全网安全检查需要,要对项目中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. linux centOS7 设置 redis 开机启动

    1.为了让redis-server能在系统启动时自动运行,需要将redis服务作为守护进程(daemon)来运行,我们回/usr/local/cluster/7000/目录中找到一个redis.con ...

  2. JAVAEE——SSH项目实战01:SVN介绍、eclipse插件安装和使用方法

    1 学习目标 1.掌握svn服务端.svn客户端.svn eclipse插件安装方法 2.掌握svn的基本使用方法 2 svn介绍 2.1 项目管理中的版本控制问题 通常软件开发由多人协作开发,如果对 ...

  3. Ubuntu 18.04 修改为静态IP

    1.进入/etc/netplan目录 cd /etc/netplan 2.查看文件 ls 3.编辑 01-network-manager-all.yaml vim 01-network-manager ...

  4. mysql 内存统计

    在 mysql 5.5 中实现了类似mysql5.7中performance schema 的内存统计功能. 功能 1 展示mysql层内存总大小. 2 展示mysql层内存使用分布情况. 3 展示每 ...

  5. python生成式和生成器

    一,生成式和生成器 1,列表生成式 mylist = [ i*i for i in range(3) if i>1 ] print(mylist) 运行结果:[4] 可以发现,快速生成列表的表达 ...

  6. HTTP 错误 401.3 - Unauthorized asp.net mvc 图片,css,js没有权限访问

    一.在服务器上发布了一个asp.net的网站,结果是页面可以显示,但是css,js,images无法访问,报错是没有权限,HTTP 错误 401.3 - Unauthorized 二.根据以往的经验, ...

  7. Sqlserver数据库中的临时表详解

    临时表在Sqlserver数据库中,是非常重要的,下面就详细介绍SQL数据库中临时表的特点及其使用,仅供参考. 临时表与永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除.临时表有两种类 ...

  8. "添加"模态框中某些数据不被清空

    描述:一般情况下,“添加”的模态框弹出够,其中的输入框等为空,若是此中有某些数据是取自其他页面,不应被清空的,我们应当在html中添加以下内容.   解决方案:在form标签中添加“ preserve ...

  9. 《SQL Server 2008从入门到精通》--20180716

    1.锁 当多个用户同时对同一个数据进行修改时会产生并发问题,使用事务就可以解决这个问题.但是为了防止其他用户修改另一个还没完成的事务中的数据,就需要在事务中用到锁. SQL Server 2008提供 ...

  10. github与本地电脑关联配置

    参考文章:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137438585 ...