OpenSSH 升级

升级机器信息收集

OpenSSH/openssl 版本 OpenSSH_6.9p1, OpenSSL 1.0.2j-fips  26 Sep 2016
系统:CentOS release 6.5 (Final)
内核版本:2.6.32-431.el6.x86_64

离线操作说明: 本文是离线操作的,其中依赖的所有的包,都是下载到本地,然后scp 或者其它方式上传到我们的没有外网的机器上的。

主要流程为:

  1. 基于 Dropbear 设置备用 ssh 服务器
  2. 备份 SSH 配置
  3. 编译安装 Openssl (按需)
  4. 升级Openssh
  5. 验证

风险点:

  1. 可能由于 Openssh 更新失败,导致 sshd 服务异常,影响正常登陆。
  2. 也可能存在上述内容升级过程中因依赖问题导致失败。

一、基于 Dropbear 设置备用 ssh 服务器

Dropbear 是一个相对轻量级的SSH服务器和客户端。它是与 OpenSSH 〜/ .ssh / authorized_keys公钥认证兼容的。 我们通过Dropbear 搭建一个新的SSH 服务器。 主要是为了避免在 升级 OpenSSH 的时候,ssh 连接异常,登陆不上服务器。

https://matt.ucc.asn.au/dropbear/dropbear.html

  1. 配置一个新的SSH 服务 dropbear

    wget  https://matt.ucc.asn.au/dropbear/dropbear-2020.80.tar.bz2
    tar -xjf dropbear-2020.80.tar.bz2
    cd dropbear-2020.80
    ./configure && make && make scp && make install
    mkdir /etc/dropbear
    /usr/local/bin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
    /usr/local/bin/dropbearkey -t rsa -s 4096 -f /etc/dropbear/dropbear_rsa_host_key
    /usr/local/sbin/dropbear -p 25022 # 这个加下到开机启动中。 后面再除去。
  2. 测试 dropbear 服务是否可以正常提供SSH 服务

    1. 关闭 sshd,然后通过 dropbear 提供的端口进行登录。 仍然用原来的用户和密码。

二、 Openssh 更新

升级版本为: Openssh7.4 与 阿里云(ECS Centos7.7)版本一致。 OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

2.1 ssh配置 备份

cp -raf /etc/ssh /etc/ssh.bak2020
cp -raf /etc/init.d/sshd /etc/init.d/sshd.bak2020
cp -raf /root/.ssh/ /root/.ssh.bak2020
cp -raf /home/yeemiao/.ssh/ /home/yeemiao/.ssh.bak2020

2.2 openssh 升级

yum   remove  openssh  # 卸载 openssh
wget https://openbsd.mirror.netelligent.ca/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz
tar -xzvf openssh-7.4p1.tar.gz
cd openssh-7.4p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-ssl-dir=/usr/local/openssl102j/ # 注意 --with-ssl-dir 值为 openssl 安装的目录。
make && make install &&
install -v -m755 contrib/ssh-copy-id /usr/bin &&
install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1 &&
install -v -m755 -d /usr/share/doc/openssh-7.4p1 &&
install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.4p1 mv /etc/init.d/sshd /etc/init.d/sshd.bak2020_2
cp -raf /etc/init.d/sshd.bak2020 /etc/init.d/sshd
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak2020_2
cp -raf /etc/ssh.bak2020/sshd_config /etc/ssh/sshd_config service sshd restart
chkconfig sshd on

Openssl 升级(由于Openssh编译失败)

异常信息:

error: *** Can't find recent OpenSSL libcrypto (see confiig.log)

解决办法: 重新编译个 openssl

在测试环境这个问题没有出现,可能由于正式环境原来编辑的 openssl 不完整,重新编译下就行了。

重新编译可以保留原来的 openssl, 然后使用一个新的目录即可。

openssl 备份

cp -raf /usr/bin/openssl /usr/bin/openssl.old
cp -raf /usr/include/openssl /usr/include/openssl.old
cp -raf /usr/lib64/libssl.so /usr/lib64/libssl.so.lod
cp -raf /usr/lib64/libssl.so.1.0.1e /usr/lib64/libssl.so.1.0.1e.old
cp -raf /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.10.old
cp -raf /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.10.old

openssl 安装

Openssl 下载地址: https://www.openssl.org/source/old/1.0.2/

我这使用的版本是 openssl-1.0.2j

tar  -xzvf  openssl-1.0.2j.tar.gz
cd openssl-1.0.2j/
./config --prefix=/usr/local/openssl102j shared
make && echo $?
make test && echo $?
make install && echo $?

openssl 配置

#  以下删除的前面都已经备份
rm -rf /usr/bin/openssl
ln -s /usr/local/openssl102j/bin/openssl /usr/bin/openssl
rm /usr/include/openssl
ln -s /usr/local/openssl102j/include/openssl /usr/include/openssl
rm /usr/lib64/libssl.so
ln -s /usr/local/openssl102j/lib/libssl.so.1.0.0 /usr/lib64/libssl.so
rm /usr/lib64/libssl.so.10
ln -s /usr/local/openssl102j/lib/libssl.so.1.0.0 /usr/lib64/libssl.so.10
rm /usr/lib64/libcrypto.so.10
ln -s /usr/local/openssl102j/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10 echo "/usr/local/openssl102j/lib" >> /etc/ld.so.conf

加载依赖和检查

ldconfig -v
openssl version -a

参考文献

Openssl 下载地址: https://www.openssl.org/source/old/1.0.2/

https://www.cnblogs.com/leekeggs/p/9557205.html

https://blog.csdn.net/u012949658/article/details/53771871

最新文章

  1. Android Butterknife 8.4.0 使用方法总结
  2. Mysql Concat()bug
  3. [Unity3d插件]EasyTouch的初步使用
  4. RxJava 的使用入门
  5. .net mvc onexception capture; redirectresult;
  6. C++Lua配置
  7. 打印Java main方法执行的命令参数代码
  8. Java实战之02Hibernate-07与效率性能相关配置
  9. Java联网技术之一HTTP
  10. hadoop日志分析
  11. APUE-文件和目录(五)函数rename和renameat
  12. 【请求之密】payload和formData有什么不同?
  13. CSS display和visibility的用法和区别
  14. webpack的css压缩不兼容IOS8问题探索
  15. DatePickerAndroid用法
  16. vue环境下安装npm,启动npm 修改js,css样式
  17. eclipse 配置打开工作空间
  18. 24-hadoop-hiveserver2&jdbc-正则数据导入
  19. .net和js 获取当前url各种属性
  20. MVC的设计模式在JavaWeb中的实现

热门文章

  1. 如何解决Mybatis 日期查询时后面带.0
  2. Java引用类型之软引用(1)
  3. Datawhale学数据分析第一章
  4. echarts 导出为word文档
  5. JavaSwing关于GridBagLayout(网格袋布局)的使用
  6. 极简 Node.js 入门 - 3.2 文件读取
  7. 数组的三种方式总结 多维数组的遍历 Arrays类的常用方法总结
  8. JAVA指令集——GETSTATIC
  9. layaair 物理
  10. nginx如何限制并发连接请求数?