openssh7.9 升级笔记
由于全网安全检查需要,要对项目中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 升级笔记的更多相关文章
- T410升级笔记
T410 win7 旗舰版 32 sp1 三星 DDR3 1066 mhz core i5 M 540 2.53GHZ 双核 日立 HTS725032A9A364 320G/7200转/分 sa ...
- element-ui升级笔记;echarts图表100px问题
1.element-ui的2.7以后的版本支持树形table结构的数据,考虑优化一下表格,就升级了,但是升级到最新的版本2.12发现table都出不来了,于是降级到2.7.目前功能正常,2.12的bu ...
- Android的Eclipse升级笔记
Eclipse优化: 1.可以删除的插件有: EGit CVS Mylyn cdt 1.不用多次加载布局容器的版本: ADT-22.3.0 adt-bundle-windows-x86-2013103 ...
- Jvm 10 升级笔记
移除了 JPEGCodec https://www.cnblogs.com/liaolongjun/p/6878359.html
- do-release-upgrade升级笔记
事后的总结: 后来可能因为阿里云镜像并不是完全底层无关镜像,do-release-upgrade后的18.04版本在经过一次异常的内核版本升级以后,restart失败,因为是虚机还很难处理,不得不直接 ...
- Drupal 7.23版本升级笔记
转载请注明出处:http://blog.csdn.net/panjunbiao/article/details/9860849 今天将尝试将Drupal网站从7.22升级到7.23,下面是升级笔记. ...
- centos6.5升级openssh至7.9p1
环境说明系统环境:centos 6.5 x64 openssh-5.3p1升级原因:低版本openssh存在漏洞升级目标:openssh-7.9p1 检查环境官方文档中提到的先决条件openssh安装 ...
- openssh升级
转载:(感谢作者) centos7 升级openssh到openssh-8.0p1版本 https://www.cnblogs.com/nmap/p/10779658.html centos 7 op ...
- Centos MySQL 5.7安装、升级教程
MySQL 5.7安装.升级笔记分享: 卸载当前的 MySQL 查看当前 MySQL 版本: ? 1 2 [root@coderknock ~]# mysql -V mysql Ver 14.14 D ...
随机推荐
- pages bookmarks for machine learning domain
http://www.ai-start.com/dl2017/html/lesson4-week2.html 达叔深度学习笔记 http://cs231n.github.io/convolution ...
- pong game using ncurses
bounce2d2.c /* * bounce2d 1.0 * bounce a character (default is 'o') around the screen * defined by s ...
- python容错
#try: except: else: #为什么叫容错呢,先说说错误,这里说的错误并不是因为马虎或者什么原因在脚本中留下的bug,这个不能容掉,所谓容掉就是略过这个错误,要在测试时候发现并修正,需要容 ...
- shell變量和數組
我們要知道shell是一個很重要的腳本能幫助我們完成很多事情 shell語言其實和很多的語言的語法是差不多的 變量: 變量的定義很簡單的,但是等號兩邊是不可以有空格的(不能有空格) 命名只能使用英文字 ...
- ODS设计
1.数据调研 2.确定数据范围 需要把上端应用需求与ODS数据范围进行验证,以确保应用所需的数据都已经从业务系统中抽取出来,并且得到了很好的组织,以ER模型表示数据主题关系 3.根据数据范围进行进一步 ...
- Hadoop HBase概念学习系列之HBase里的HRegion(五)
首先,要区分,HRegion服务器包含两大部分:HLog部分和HRegion部分 HBase里的HRegion服务器 HBase里的HRegion 当表的大小超过设置值的时候,HBase会自动将表划 ...
- SDN期末验收
队名:取个队名真难 一.网络拓扑 二.负载均衡程序 1.建立拓扑的代码 拓扑 2.下发组表流表的代码 下发流表 三.演示视频 1.目的 服务器h2,h3,h4上各自有不同的服务,h1是客户端.实现一个 ...
- 何为用户体验?附《用户体验的要素》PDF版下载
一.什么是用户体验? 用户体验(User Experience,简称UE/UX)是用户在使用产品过程中建立起来的一种纯主观感受.但是对于一个界定明确的用户群体来讲,其用户体验的共性是能够经由良好设计实 ...
- 一篇关于介绍php的几个user 认证相关的几个包
http://kodeinfo.com/post/laravel-authentication-packages LARAVEL AUTHENTICATION PACKAGES By Imran Iq ...
- vue组件-子组件向父组件传递数据-自定义事件
自定义事件 我们知道,父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,应该怎样做?那就是自定义事件!