在运维实践过程中,经常遇到扫描出openssh漏洞问题,需要将openssh升级最新版本,当前openssh最新版本已经升级到9.6。在新版本的openssh升级过程中与旧版本的升级存在一些差异,写下文章进行记录。
注:以下操作在CentOS7.9中验证,在其他操作系统中,需要进行验证后,再到生产环境进行。
由于openssh9.6需要openssl1.1.1版本支持,需要先对openssl进行升级后,才能继续进行openssh升级。
源码下载
在官方网站www.openssh.org进行源码下载。
cd /root
wget --no-check-certificate https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz
Openssl升级
由于CentOS7.9自带openssl版本为1.0.1,需要将系统自带的openssl升级为1.1.1版本后,才可升级至openssh9.6,按以下步骤对openssl进行升级。
升级前版本检查
openssl version
备份openssl
备份系统自带的openssl程序,避免升级失败导致openssl相关无法使用。
cp /usr/bin/openssl /usr/bin/openssl.bak
卸载旧版openssl
卸载旧版本的openssl,避免在安装新版本openssl时与旧版本程序造成冲突。
yum -y remove openssl
编译安装新版openssl
cd /root
tar xf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
# 编译前配置基本环境,指定编译后安装路径为/usr
./config --prefix=/usr
# 编译程序,编译完成后安装
make -j 4 && make install
检查升级后的openssl版本
openssl version
依赖安装
yum -y install gcc zlib-devel pam-devel libselinux-devel
旧版本备份
查看版本号
# 查看版本号
ssh -V
sshd -H
备份旧程序
CURR_DT="$(date '+%F_%T'|tr -d ":-")"
echo 当前备份号:${CURR_DT}
mkdir -pv /root/ssh_back/${CURR_DT}
cp --parents -a /etc/ssh /root/ssh_back/${CURR_DT}
cp --parents -a /etc/pam.d/sshd /root/ssh_back/${CURR_DT}
cp --parents -a /usr/bin/ssh* /root/ssh_back/${CURR_DT}
cp --parents -a /usr/sbin/sshd* /root/ssh_back/${CURR_DT}
tree /root/ssh_back/${CURR_DT}
编译新版本
编译配置
cd /root
tar xf openssh-9.6p1.tar.gz
cd openssh-9.6p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-ipaddr-display --with-4in6 \
--with-selinux
编译安装
make -j 4 && make install
程序版本检查
ssh -V
sshd -V
服务配置
# 修改ssh服务管理配置文件
sed -i 's|Type=notify|Type=simple|g' /usr/lib/systemd/system/sshd.service
cat /usr/lib/systemd/system/sshd.service
systemctl daemon-reload
# 修改ssh服务程序配置文件
chmod 600 /etc/ssh/*_key
sed -i 's|^GSSAPI|#GSSAPI|g' /etc/ssh/sshd_config
# 公钥算法支持配置,添加ssh-rsa算法:ssh-rsa
# 由于openssh8.2开始默认禁用rsa算法,可能导致老版本的ssh客户连接失败,在此添加rsa算法支持
echo 'PubkeyAcceptedAlgorithms +ssh-rsa' >> /etc/ssh/sshd_config
检查配置
sshd -t
服务重启
systemctl restart sshd
服务启动检查
systemctl status sshd
ss -anltp | grep sshd