转载:RedHat6.10 OpenSSH 8.0p1升级操作手册
升级说明
本手册以 Redhat6.10(rhel-server-6.10-x86_64-dvd.iso)为主要测试环境,后续也测试了 CentOS7.6(CentOS-7-x86_64-Everything-1810.iso)和Redhat5.11(rhel-server-5.11-x86_64-dvd.iso)相关版本信息如下。本文档的以下演示步骤均在 Redhat6.10 下完成。
升级实施均以 root 用户操作,未测试升级后 HTTPS 等相关依赖间组件间的影响,仅测试 SSH 登陆正常。建议在有备份能回退环境下进行测试验证。
升级操作可以在纯内网环境下执行,升级前需要使用 yum 服务器补充安装包;操作过程中可能出现 SSH 无法登陆情况,部分网络文档中建议临时安装 Telnet 服务等临时远程工具辅助升级,本文下述操作均在 SSH 连接下完成,未安装其它远程工具。安装中使用了自建 Yum 源与 HTTP 服务器供源码安装包下载使用。
计划将系统默认安装的 OpenSSH 组件(版本参照下表)进行升级,参考升级时间为 3~5 分钟。
OpenSSH 存在的高危漏洞
漏洞查询网站:
CVE 通用漏洞与披露
http://cve.scap.org.cn/vulns?keyword=openssh
国家信息安全漏洞库
http://www.cnnvd.org.cn/web/vulnerability/queryLds.tag
国家信息安全漏洞共享平台
https://www.cnvd.org.cn/flaw/list.htm?flag=true
TCP Wrappers 功能将不再支持,按照本文档操作升级完成后 TCP Wrappers 功能将失效。详见"TCP Wrappers 配置失效" 。
Redhat 6.8 以下版本升级 SSL 后可能出现 NTP 服务无法启动情况,此时可在 OpenSSH 升级完成后对 NTP 进行升级,Redhat 6.8 及以上版本无影响。
操作系统版本为 Redhat6.10,系统信息如下:
[root@Redhat6 user]# cat /etc/redhat‐release
Red Hat Enterprise Linux Server release 6.10 (Santiago)
[root@Redhat6 user]# cat /proc/version
Linux version 2.6.32-754.el6.x86_64 (mockbuild@x86-033.build.eng.bos.redhat.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) ) #1 SMP
Thu May 24 18:18:25 EDT 2018
升级前检查 Redhat6.10 当前版本(部分命令略有不同)如下表所示:
安装前准备
操作前请自行备份,推荐使用VM快照!
关闭 SElinux 和防火墙。关闭 SELinux 参考"升级后 SSH 连接提示密码错(SELinux 影响)"。
sestatus
确认 SELinux 已经 disalbe 了再继续。
清空日志
cat /dev/null > /var/log/messages
重启后检查日志,关注有无 lib 相关报错信息,以便升级后比对哪些 lib 相关报错为升级后新产生。
more /var/log/messages | grep lib
安装依赖包
yum install ‐y gcc wget make zlib zlib‐devel pam pam‐devel
yum install ‐y perl libssl-dev
若不安装 GCC,make 时会报错 "gcc: not found make: *** ";
若不安装 pam,后续操作中可能出现报错 "configure: error: PAM headers not found 错误";
perl 在 zilb 安装时需要。
Redhat5.11 需要先升级 Perl,详见"Redhat5.11 升级 OpenSSH8.0p1 时出现的问题"
yum install ‐y perl‐CPAN
如 OpenSSL 安装时不做 make test 则无需安装 perl-CPAN。详见:不安装 Perl 模块"Text::Template"。
Redhat5.11 无此软件包。
安装包准备
#升级用安装包文件,本例中安装包均从内网自建 http 服务器下载。
#创建升级临时目录,下载 3 个升级包,并按照顺序逐一升级。
cd /usr/local/src
wget http://<HTTP‐Server‐IP>/OpenSSH_Upgrade/openssh8.0/zlib‐1.2.11.tar.gz
wget http://<HTTP‐Server‐IP>/OpenSSH_Upgrade/openssh8.0/openssl‐1.1.1d.tar.gz
wget http://<HTTP‐Server‐IP>/OpenSSH_Upgrade/openssh8.0/openssh‐8.0p1.tar.gz
chmod 777 /usr/local/src/*.tar.gz
ls -al /usr/local/src/*.tar.gz
当前 SSH 备份与卸载
#备份原 ssh
mkdir /etc/ssh.BAK
cp -p /etc/ssh/* /etc/ssh.BAK/
#原有/etc/ssh 目录备份至/etc/ssh.BAK
ls -al /etc/ |grep ssh
#检查系统中已安装的 ssh 相关包
rpm -qa |grep openssh
#卸载当前 ssh
for i in $(rpm -qa|grepopenssh); do rpm -e $i --nodeps;done
#确认 ssh 已卸载完成
#以下无内容表示系统默认安装的 SSH 卸载完成, 一旦卸载完成请勿断开当前 SSH 连接、重启 ssh 服务,防止 SSH 会话超时断开。
rpm -qa |grep openssh
#删除 ssh 目录
rm -rf /etc/ssh/
#删除 ssh 目录后
ls -al /etc/ | grep ssh
当前 SSL 备份与卸载
#查找 OpenSSL 相关目录
#Redhat6.10 备份上述 openssl 相关目录
tar czvPpf /etc/pki/ca-trust/extracted/openssl.BAK.$(date +%Y%m%d%H%M).tgz /etc/pki/ca-trust/extracted/openssl/
tar czvPpf /usr/lib64/openssl.BAK.$(date +%Y%m%d%H%M).tgz /usr/lib64/openssl/
tar czvPpf /usr/bin/openssl.BAK.$(date +%Y%m%d%H%M).tgz /usr/bin/openssl
#检查已备份 openssl 相关目录
find / -name "openssl.BAK.*"
find /usr/lib64 -name "libcrypto*"
find /usr/lib64 -name "libssl*"
rpm -qa | grep openssl
#卸载当前 ssl
for i in $(rpm -qa|grep openssl);do rpm‐e $i --nodeps;done
强烈不推荐 CentOS7.6 卸载 openssl 包,详见后文:CentOS7.6 升级完成重启后,网卡无法通过 DHCP 获取 IP
#检查上述步骤中所有备份文件
find / -name "*.BAK*"
zlib 编译与安装
cd /usr/local/src
tar -zvxf zlib-1.2.11.tar.gz
cd /usr/local/src/zlib-1.2.11
#创建 zlib Makefile 文件
./configure
make clean; make
make test
make check
make install
ll /usr/local/lib
安装 Perl 模块"Text::Template"
通过 CPAN 工具安装 Perl 模块"Text::Template",否则在 OpenSSL 执行make test 时会出现报错,详见后文"OpenSSL 执行 make test 报错"。未安装 perl-CPAN,可跳过此章节,继续进行 OpenSSL 编译与安装。在我的测试环境中未见明显差别,详见后文: 不安装 Perl 模块"Text::Template"。
perl -MCPAN -e shell
回答"yes"
在 cpan[1]>后输入 install Text::Template
本步骤需要互联网权限连接 ftp://ftp.perl.org/
回答"yes"
回答"yes"
回答"yes"
cpan[2]>后回答"exit"退出
OpenSSL 编译与安装
cd /usr/local/src/
tar -zvxf openssl-1.1.1d.tar.gz
cd /usr/local/src/openssl‐1.1.1d
./config ‐‐prefix=/usr/local/ssl ‐‐openssldir=/usr/local/ssl --shared zlib
make clean; make
#make 时间较长大约需要 3 分钟
make test
#还是有少许报错,能力有限查不出原因。暂时跳过继续。
make check
make install
#查看 OpenSSL 安装有无报错,0 表示正常。
echo $?
#检查创建软连接需要的源文件路径
find / ‐name "openssl"
find / -name "libssl.so*"
find / -name "libcrypto.so*"
#创建软链接
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln ‐s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
#务必注意上述命令执行时是否有任何报错信息,如果有注意检查创建软连接需要的源文件路径
ln ‐s /usr/local/ssl/include/openssl /usr/include/openssl
ln ‐s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so
ln ‐s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so
ln ‐s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.10
ln ‐s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.10
#检查软连接创建情况
ll /usr/bin/openssl*
ll /usr/lib64/libssl*
ll /usr/lib64/libcrypto.so.*
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
more /etc/ld.so.conf
Ldconfig
ldconfig -v
对比发现只有上表中标黄一行有差异。
openssl version -a
OpenSSH 编译与安装
cd /usr/local/src/
tar ‐xvf openssh‐8.0p1.tar.gz
cd /usr/local/src/openssh‐8.0p1
./configure ‐‐prefix=/usr ‐‐sysconfdir=/etc/ssh ‐‐with‐md5‐passwords ‐‐with‐pam ‐‐with‐ssl‐dir=/usr/local/ssl –without-hardening
-- prefix 就是说软件额安装目录设置在哪里,后面的=/usr 就是你给出的安装目录;
--with-tcp-wrappers 参数 OpenSSH 已经不支持, 如果添加此参数将会出现 "configure: WARNING: unrecognized options: --with-tcp-wrappers"提示。
make clean; make
make test;make check
#复制配置文件、赋权、添加到开机启动项
cp -p /usr/local/src/openssh-8.0p1/contrib/redhat/sshd.init /etc/init.d/sshd
chmod u+x /etc/init.d/sshd
chkconfig ‐‐add sshd
chkconfig sshd on
chkconfig --list|grep sshd
#允许 root 用户 ssh 登陆
sed ‐i "32a PermitRootLogin yes" /etc/ssh/sshd_config
sed ‐i "58a PasswordAuthentication yes" /etc/ssh/sshd_config
#此时启动 SSH 服务,或重启系统,此时可以尝试重启服务器后再测试 ssh 连接是否正常。
service sshd start
#重启后 SSH 连接将会类似以下提示,属于正常情况。
恢复 SSH 配置文件
由于 SSH 配置因各自环境使用情况不同,推荐自己比对新、老 SSH 配置后自行修改,以下仅供参考。
OpenSSH8.0p1 默认 SSH 配置
修改后用户自定义配置
据说增加"Custom EncryMode"部分的配置能增强对部分 SSH 客户端兼容性。
升级后版本检查与确认
zlib
ll /usr/local/lib
find /usr/ ‐name zlib.pc
cat /usr/local/lib/pkgconfig/zlib.pc
OpenSSL
openssl version -a
OpenSSH
ssh -V
可能出现的问题
如果网卡启动正常有 ssh 连接不上的
Xshell5 "no matching key exchange method found … …"
Xshell5 Build1247 连接时出现如下报错
no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
在 SSH Server 的/var/log/secure 中产生如下日志
https://www.openssh.com/legacy.html
https://networkforbeginners.com/no-matching-key-exchange-method-found/
推荐升级 SSH 客户端版本,如难以升级参考以下解决方法:
1. SSH 连接时增加以下标黄参数
ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 tr_fs@10.145.9.10
或者
ssh user@10.145.9.10 -o Kexalgorithms=+diffie-hellman-group1-sha1
2. 修改用户下/.ssh/config 文件
vi ~/.ssh/config
Host 10.*.*.*
KexAlgorithms +diffie-hellman-group1-sha1
SSH 客户端连接报错"Host key verification failed."
如 SSH 服务器升级完 OpenSSH 后曾经在升级前连接过此服务器的其它主机再次连接是报错,以下图为例,ZQ-Redhat5 在*.*.19.140 升级完 OpenSSH 后再次 SSH 连接*.*.19.140 是出现报错。
有以下两种方法解决。
方法 1:从 known_hosts 中将*.*.19.140 删除后重新连接即可。
vi ~/.ssh/known_hosts
方法 2: 执行 ssh-keygen -R *.*.19.140
执行后将会从~/.ssh/known_hosts 中删除对应 IP 地址的一行(效果与方法 1 相同) ,但同时会在"~/.ssh/"下备份原有"known_hosts"为"known_hosts.old" 。
TCP Wrappers 配置失效
通过 TCP Wrappers 配置针对 SSH 访问的 IP 过滤
经查 OpenSSH 6.7/6.7p1 (2014-10-06)起不再支持 TCP Wrappers
https://www.openssh.com/releasenotes.html
Support for tcpwrappers/libwrap has been removed.
更多详情见 http://www.openssh.com/txt/release-6.7
但是 CentOS7.6 自带的 OpenSSH7.4p1 版本是可以支持 tcp-wrappers。具体实现方法目前没有找到。
在安装 OpenSSH8.0p1 执行以下命令建立 Makefile 时
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords--with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/ssl --without-hardening
注意会出现如下报错
configure: WARNING: unrecognized options: --with-tcp-wrappers
OpenSSL 执行 make test 报错
make test
升级后 SSH 连接提示密码错(SELinux 影响)
升级完成后 SSH 客户端连接不上服务器,报密码错误;
测试服务器网络正常,排查网络问题;
测试 root 用户在 VM Console 下直接登陆正常,排除密码输入错误问题;
检查 sshd_config 中"PermitRootLogin yes"已配置。
检查/var/log/secure 未见异常
检查/var/log/messages
messages 日志中有"Could not get shadow information for root"
检查 SELinux 设置状态,将 SELINUX=enforcing 改为 SELINUX=disable,重启再试即可。
OpenSSH 安装前是否需要添加 sshd 用户、组
部分实施文档中再 OpenSSH 安装前有一步安装环境配置,其中需要添加 sshd 用户与 sshd 组,实际操作中请自行检查自己的环境是否已存在这两个内容,本文档测试的三个版本系统中均已存在 sshd 用户、组配置,且安装环境配置中指定的 GID、UID 为 50 与内置默认的 ftp 用户冲突。所以本文档中不再对此部分进行操作。
对比以上三个版本的用户、组信息中 sshd 与 ftp,无差别。所以上述安装过程中不再保留此部分内容。
不安装 Perl 模块"Text::Template"
在 OpenSSL 编译与安装步骤中执行至 "make test"时将会出现如下报错,但安装 Perl 模块"Text::Template"需要互联网连接,在内网环境实施时不方便,建议相同类型系统初次升级测试时安装,如"make test"未发现问题,后续可不安装。
Redhat5.11 zlib 模块编译安装报错(perl 版本低)
在执行./config shared zlib --prefix=/usr/local/ssl 时报错,Redhat5.11 中 perl 为 v5.8.8,后续安装 zlib 时需要将 perl 升级至 5.10或以上版本(Redhat6.10 中 perl 为 5.10.1;CentOS7.6 中 perl 为 5.16.3) ,当前主推版本为 perl-5.28.2.tar.gz。
Operating system: x86_64-whatever-linux2
Perl v5.10.0 required--this is only v5.8.8, stopped at ./Configure line 12.
参考以下操作,先升级好 perl 后再参考前述文档进行也能顺利完成。
Perl 下载地址
https://www.cpan.org/src/
参考升级步骤
perl 安装完成后返回 "安装包准备" 继续后续安装。
CentOS7.6 升级完成重启后,网卡无法通过 DHCP 获取 IP
CentOS7.6 升级完成 OpenSSH 后网卡无法获取 IP 地址, 查看/var/log/messages 有大量关闭 lib 的报错, 涉及libcrypto、 libssl, lib 报错涉及服务包括 aliasesdb、 auditd、 NetworkManager、 postfix、 tuned、 VGAuthService、vmtoolsd。
修改主机网卡为静态 IP 后网络能通,但报错信息持续。SSH 能够正常连接,但 Yum 更新不能使用,报错信息如下:
解决办法为不要卸载系统中原有 OpenSSL 组件。Redhat6.10 和 Redhat5.11 上未发现此情况。
升级操作日志
删除升级文件
#查找系统升级过程中保存备份文件
find / ‐name "*.BAK*"
#删除备份文件
for i in (find/‐name"∗.BAK∗");dorm‐rf(find/‐name"∗.BAK∗");dorm‐rf i;done
find / ‐name "*.BAK*"
#删除安装包
ls ‐al /usr/local/src/*.tar.gz
rm ‐rf /usr/local/src/*.tar.gz
ls ‐al /usr/local/src/*.tar.gz
#安装包解压文件ls ‐al /usr/local/src/
先留着吧,万一哪天还想 make uninstall.
sshd 相关动态连接库
参考资料
升级 openssh 8.0 操作文档.docx 李欣昊
RedHat 操作系统 OpenSSH 相关漏洞解决方案.zip
|--REDHAT SSH 漏洞解决方案.docx
|--附件 1:REDHAT 6 升级 SSH 到 7.9 指导书.docx
|--附件 2:REDHAT 6 升级 NTP 指导书.docx
redhat 用脚本升级 openssh 到 7.9(使用 CentOS Yum 源方式)
ticket=ST-711856-oo4FZo2MgXj0uEKoxptMNOtA-sso#attachment
RedHat6 使用 CentOS yum 源
centos7 升级 openssh
Linux openssh8.0p1 升级步骤(shell 版本)
在 64 位 CentOS 6.9 上编译 OpenSSL 1.1.1 (1)
在 64 位 CentOS 6.9 上编译 OpenSSL 1.1.1 (2)
OpenSSH-8.0p1