参考资料:
官方openssh升级资料:http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssh.html
参考博客:https://www.cnblogs.com/xshrim/p/6472679.html
升级openssh从7到8多亏了这个博客的帮助。

当前系统信息
[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

[root@localhost ssh]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

一、准备工作
平台检测一般会出现openssl和openssh的漏洞,所以基本上每次有新版本都会升级openssh,openssl有时候不是必须的,不过为了以后再升级openssl麻烦,这里也升级openssl到最新版本。

下载编译安装环境
yum -y install gcc pam-devel zlib-devel yum-utils
这里yum-utils安装的目的是为了下载软件方便,通过使用命令yumdownloader下载openssh和openssl的软件包,防止升级出错,可以直接rpm -ivh 安装openssl和openssh恢复系统连接。命令用法:
yumdownloader openssh
这样会下载openssh的rpm安装包到本地。
一般这里要下载openssl,openssl-devel,openssh,openssh-clients只要这4个安装包有,就可以回退。

注意:根据实际观察,centos7.6重启sshd的时候连接是不会断开的,所以这里我就不安装telnet-server了。centos6及以前的版本都需要安装telnet-server,不然重启sshd的时候连接会断开。根据自己情况定。

查看selinux和firewalld,如果开启状态就关闭。
注意:centos7防火墙默认是firewalld不是iptables
systemctl status firewalld #默认开启的。
systemctl stop firewalld #关闭

查看状态
getenforce
关闭,临时有效,重启后失效
setenforce 0
永久关闭selinux,重启系统后生效
[root@cents7 ~]# cat /etc/selinux/config | grep -v ^#
SELINUX=disabled #enforcing改为disabled
SELINUXTYPE=targeted

下载安装包,目前最新版本,官网下载
http://www.openssl.org/
http://www.openssh.org/

openssl-1.0.2s.tar.gz
openssh-8.0p1.tar.gz

解压软件包
tar zxvf openssl-1.0.2s.tar.gz
tar zxvf openssh-8.0p1.tar.gz

二、安装
卸载软件openssl,在/usr/lib64下面有库文件,centos6还要备份libssl和libcrypto这两个,现在不需要备份了。
[root@6 ~]# rpm -qa | grep openssl | xargs -i rpm -e --nodeps {}
检查卸载情况
[root@6 ~]# rpm -qa | grep openssl

编译安装openssl-1.0.2s
cd openssl-1.0.2s
./config --prefix=/usr --openssldir=/etc/ssl --shared zlib

make && make install
make之后可以使用make test来检测安装情况,出现PASS,可以继续。这个非必须的。

查看是否安装openssl成功。
openssl version
显示版本为openssl-1.0.2s为成功

使用ssh -V查看显示的还是以下信息,不必担心。在centos6.10升级openssh8.0的时候出现过头文件与库文件不匹配的问题,当时废了一天时间才解决问题,可以使用find命令查找opensslv.h文件,把老旧的此头文件改个名字,也可以删除,重新编译就可以了。

[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

卸载openssh
rpm -qa | grep openssh | xargs -i rpm -e --nodeps {}

修改sshd的用户信息,可以根据官方文档上的来,不过由于系统默认ftp的组id是50所以官方网站上的命令由于冲突所以执行不成功,这里拆分一下,分步执行。把ftp组id修改为51,也可以改为其它。
usermod -c 'sshd PrivSep' sshd
usermod -d /var/lib/sshd -m sshd
usermod -s /bin/false sshd
groupmod -g 51 ftp
groupmod -g 50 sshd
usermod -u 50 sshd

显示以下结果表示修改成功,这里如果不修改为以下显示的话,openssh编译会出错。
cat /etc/passwd | grep sshd
sshd:x:50:50:sshd PrivSep:/var/lib/sshd:/bin/false

编译安装openssh8.0
cd openssh-8.0p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-privsep-path=/var/lib/sshd

make
make install

make install最后输出如果包含以下内容
ssh-keygen: generating new host keys: DSA
/usr/sbin/sshd -t -f /etc/ssh/sshd_configbr/>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @br/>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/etc/ssh/ssh_host_rsa_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.br/>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @br/>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/etc/ssh/ssh_host_ecdsa_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.br/>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @br/>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/etc/ssh/ssh_host_ed25519_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
sshd: no hostkeys available -- exiting.
make: [check-config] Error 1 (ignored)

上面虽然没有报错,只是警告信息,但是后面重启还是会出错。所以在这里修改权限。
[root@localhost openssh-8.0p1]# chmod 600 /etc/ssh/ssh_host_rsa_key
[root@localhost openssh-8.0p1]# chmod 600 /etc/ssh/ssh_host_ecdsa_key
[root@localhost openssh-8.0p1]# chmod 600 /etc/ssh/ssh_host_ed25519_key

设置openssh-8.0p1的环境信息
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-8.0p1
install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-8.0p1

设置启动脚本
在openssh-8.0编译目录下
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
chmod +x /etc/init.d/sshd
chkconfig --add sshd
systemctl start sshd #启动服务
systemctl enable sshd #设置开机启动
chkconfig sshd on
/usr/sbin/sshd #没有结果是最好的结果

重启sshd
systemctl restart sshd
systemctl status sshd #显示active (running)表示启动成功。

显示以下结果表示升级完成
[root@localhost ssh]# ssh -V
OpenSSH_8.0p1, OpenSSL 1.0.2s 28 May 2019