文章都可以转载、引用,标明转载出处即可。

OpenSSH 升级

Linux应用 Mr.c 4507℃ 0评论

  *2018-12月更新补充:openssh 升级一定要主要openssl的版本,安装最新版openssh那就对应下载最新版openssl ,否则容易安装失败,一般来说升级openssh出现报错,最好检查下是不是对应openssl版本过低。*
  最近OpenSSH 被爆出了很多漏洞,生产环境的服务器最好还是升级到最新版修复漏洞,不然哪天服务器被破解了就麻烦啦。
本次升级为修复漏洞【CVE-2016-8858】
  系统环境:centos 6.5_64 #centos7 上升级也是同样的操作
  升级前openssh 版本:OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
  准备升级的openssh版本:openssh-7.3p1
安装前准备:
下载所需安装包:
  OpenSSL源码包 下载:https://www.openssl.org/source/openssl-1.0.2j.tar.gz
  OpenSSH源码包下载: http://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
  Zlib源码包下载: http://zlib.net/zlib-1.2.8.tar.gz
请多连接上几个终端,以免出现意外后能及时回滚,否则openssh 无法正常工作就不能ssh连接服务器了。

一:安装Zlib

[root@aliyun home] tar -xvf zlib-1.2.8.tar.gz
[root@aliyun home] cd zlib-1.2.8
[root@aliyun zlib-1.2.8] ./configure --shared
[root@aliyun zlib-1.2.8] make  && make install 

二:安装OpenSSL

[root@aliyun home] tar zxf openssl-1.0.2j.tar.gz
[root@aliyun home] cd openssl-1.0.2j/
[root@aliyun openssl-1.0.2j] ./config --prefix=/usr/local/ssl  shared  
[root@aliyun openssl-1.0.2j] make  && make install

#备份之前目录和文件。

[root@aliyun openssl-1.0.2j] mv /usr/bin/openssl{,_bak}
[root@aliyun openssl-1.0.2j] mv /usr/include/openssl{,_bak}

#将新版本文件链接到bin目录。

[root@aliyun openssl-1.0.2j] ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl  
[root@aliyun openssl-1.0.2j] ln -s /usr/local/ssl/include/openssl /usr/include/openssl   

#加载动态 库。

[root@aliyun openssl-1.0.2j] vim /etc/ld.so.conf  
/usr/local/ssl/lib
include ld.so.conf.d/*.conf
[root@aliyun openssl-1.0.2j] ldconfig  #让配置生效

#查看openssl版本是否已经升级成功。

[root@aliyun openssl-1.0.2j] openssl version -a 
OpenSSL 1.0.2j  26 Sep 2016
built on: reproducible build, date unspecified
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
...............

三:安装OpenSSH

[root@aliyun home] tar zxf openssh-7.3p1-CVE-2016-8858.tar.gz
[root@aliyun home] cd openssh-7.3p1/

  安装报错,查了下需要修改文件,如为原版openssh-7.3p1包则添加下图代码,从我网盘下载的已经添加过。
  解压openssh源码包,修改源码包根目录中的kex.c文件,搜debug(“SSH2_MSG_KEXINIT received”); 在这附近添加。

ssh_dispatch_set(ssh, SSH2_MSG_KEXINIT, NULL);

[root@aliyun openssh-7.3p1] ./configure --prefix=/usr/local/sshd --sysconfdir=/usr/local/sshd/ssh --with-openssl-includes=/usr/local/ssl/include -with-ssl-dir=/usr/local/ssl --with-privsep-path=/var/myempty --with-privsep-user=sshd --with-zlib --with-ssl-engine --with-md5-passwords --disable-etc-default-login
[root@aliyun openssh-7.3p1] make && make install

  最近在centos7上升级了openssl 1.1.1 和 openssh 7.9版本,发现已经没有–with-openssl-includes 这个参数了,并且也不需要修改kex.c文件,直接编译安装即可。
#按照之前服务器sshd的设置,修改新配置文件。

[root@aliyun openssh-7.3p1] vim /usr/local/sshd/ssh/sshd_config

#复制启动脚本到系统init.d目录。

[root@aliyun openssh-7.3p1] cp contrib/redhat/sshd.init /etc/init.d/sshd

#centos7上需要取消原systemctl 方式启动脚本,替换为init.d 脚本启动

[root@aliyun openssh-7.3p1] mv /usr/lib/systemd/system/sshd.service{,_bak}
[root@aliyun openssh-7.3p1] systemctl daemon-reload

#备份之前版本的sshd文件,将文件软连接到bin目录。

[root@aliyun openssh-7.3p1] mv /usr/sbin/sshd{,_bak}
[root@aliyun openssh-7.3p1] mv /usr/bin/sshd{,_bak}
[root@aliyun openssh-7.3p1] ln -s /usr/local/sshd/sbin/sshd /usr/sbin/sshd
[root@aliyun openssh-7.3p1] ln -s /usr/local/sshd/sbin/sshd /usr/bin/sshd
#scp 等命令建议也一并备份后替换为新的。
[root@aliyun openssh-7.3p1] mv /usr/bin/scp{,_bak}
[root@aliyun openssh-7.3p1] mv /usr/bin/sftp{,_bak}
[root@aliyun openssh-7.3p1] mv /usr/bin/ssh-add{,_bak}
[root@aliyun openssh-7.3p1] mv /usr/bin/ssh-agent{,_bak}
[root@aliyun openssh-7.3p1] mv /usr/bin/ssh-keygen{,_bak}
[root@aliyun openssh-7.3p1] mv /usr/bin/ssh-keyscan{,_bak}

[root@aliyun openssh-7.3p1] ln -s /usr/local/sshd/bin/* /usr/bin

#重启sshd服务,并验证是否升级成功。

[root@aliyun home] service sshd restart
[root@aliyun home] ssh -V
OpenSSH_7.3p1, OpenSSL 1.0.2j  26 Sep 2016

  好了,OpenSSH的升级就完成了,重新连接一个终端窗口测试一下是否能正常连接。
如果出现升级后root登录失败,可以查看下是否是/usr/local/sshd/ssh/sshd_config 里面有没有配置PermitRootLogin yes 参数。

转载请注明:菜鸟运维 » OpenSSH 升级

喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(4)个小伙伴在吐槽
  1. 求教:非计算机专业的本科出身,只看了鸟哥的linux私房菜,操作过自己的vps,这样的条件去应聘运维有戏不?
    穹庐2017-02-24 11:12 回复
    • 我个人认为不在乎是否计算机专业,做IT行业都要看自己有没有兴趣,鸟哥的两本书写的都很好,真正的去公司做运维还是需要自己先练习,基本的环境、服务都模拟实验下,给个建议,有涉及到数据的操作前一定要先备份。
      Mr.c2017-02-24 11:33 回复
      • 嗯,要不要自学好shell和python和sql语言才去应聘呢? 还是说光靠鸟哥这两本书,进去了才慢慢学语言?
        穹庐2017-02-24 20:50 回复
        • 至少shell 是必须会的,还有正则世也必须会,不然去面试的时候一问三不知,就会安装一点服务没什么用的。
          Mr.c2017-02-25 07:40 回复