说明
centos7存在关于openssh的安全漏洞,需打补丁。
环境描述:联网,centos7.9公版云主机,有云端控制台,可在无ssh时访问系统。
访问环境
root用户ssh到云主机
查询信息
查询ssh版本
bash
ssh -V

查询openssl
bash
openssl version

注意:低于1.1.1的必须升级至1.1.1及以上版本
查询opeensl的位置及安装的软件
bash
which openssl
rpm -qa | grep openssl

查询命令位置
bash
which -a ssh
which -a sshd

查询操作系统版本
bash
cat /etc/os-release

查询服务状态
此处用于规避纠纷扯皮。
bash
systemctl status sshd

备份数据
bash
mkdir -p /opt/backup/{ssh,pam,sshd}
cp -r /etc/ssh/* /opt/backup/ssh
cp -r /etc/pam.d/* /opt/backup/pam
cp -r /etc/sysconfig/sshd/* /opt/backup/sshd

下载软件
下载openssl
浏览器访问https://openssl-library.org/source/
推荐选择LTS标记的版本

上传至云主机的/opt目录
下载openssh
浏览器访问https://www.openssh.org/portable.html
任意选择下载通道,例如

INSTALL是安装说明
README是整体说明
tar.gz是本次使用的软件包。推荐下载最新版本。

上传至云主机的/opt目录

更新openssl
注意,高危操作,操作失误会导致系统多个重要内置工具故障。
安装基础环境
bash
yum -y groupinstall "Development Tools"
yum -y install wget zlib-devel perl-core pcre-devel
解压文件
bash
tar -zxf openssl-3.5.6.tar.gz
cd openssl-3.5.6
配置代码
bash
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
编译代码
bash
make -j$(nproc)
测试代码
可选。时间充裕且流程严谨的环境需操作。摸鱼必备。
bash
make test
安装
bash
make install
备份旧版openssl
bash
mv /usr/bin/openssl /usr/bin/openssl.old
配置软链接
bash
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
更新动态库
bash
echo "/usr/local/openssl/lib64" > /etc/ld.so.conf.d/openssl3.conf
ldconfig
查询配置
bash
ldconfig -p | grep ssl
ldconfig -p | grep crypto

查询版本
bash
openssl version


更新完成且成功。
卸载openssh
注意:卸载后,将无法新建会话进行ssh访问,原有ssh会话不关闭时,可继续使用,建议后续操作保持ssh会话。应确保自己可以通过服务器的BMC界面或云平台的VNC界面访问操作系统,在ssh会话断开时,随时可访问。
查询已安装的ssh软件包
bash
rpm -qa | grep openssh
yum list installed | grep openssh
rpm -ql openssh-server

完整卸载旧版ssh
bash
systemctl stop sshd
systemctl disable sshd
yum remove -y openssh-server openssh-clients openssh
rm -rf /etc/ssh/*
rm -rf /etc/pam.d/sshd
rm -rf /etc/sysconfig/sshd
rm -rf /var/empty/sshd
安装新版openssh
解压
bash
tar -zxf openssh-10.3p1.tar.gz
cd openssh-10.3p1

配置软件
bash
yum makecache
查询基础软件是否存在
bash
gcc --version
make --version
autoconf --version
automake --version
libtool --version
pkg-config --version

安装依赖库
bash
yum install -y pam-devel
验证必备内容
bash
rpm -qa | grep devel | grep -E "zlib|openssl|pam"
安装扩展功能库
可选。推荐。
bash
yum install -y libedit-devel libselinux-devel krb5-devel openldap-devel
安装FIDO2支持
可选,忘记操作了,没记录。
安装安装 LDNS(DNSSEC 支持)
可选,忘记操作了,没记录。
配置专用账户
bash
groupadd -f -r sshd
useradd -c "Privilege-separated SSH" -g sshd -s /bin/false -M sshd
配置代码
bash
./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-ssl-dir=/usr/local/openssl \
--with-pam \
--with-zlib \
--with-md5-passwords \
--with-privsep-user=sshd \
--with-privsep-path=/var/lib/sshd
编译代码
bash
make -j$(nproc)
安装
bash
make install
验证
bash
ssh -V
sshd -V

配置服务持久化
执行以下命令
服务1
bash
cat > /usr/lib/systemd/system/sshd.service <<EOF
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D \$OPTIONS
ExecReload=/bin/kill -HUP \$MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
EOF
服务2
bash
cat > /usr/lib/systemd/system/sshd-keygen.service <<EOF
[Unit]
Description=OpenSSH server key generation
Before=sshd.service
[Service]
ExecStart=/usr/sbin/sshd-keygen
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
重新加载服务,查询验证
bash
systemctl daemon-reload
systemctl enable sshd
systemctl restart sshd
systemctl status sshd
netstat -lntp | grep sshd
访问验证
ssh 账户名@localhost
输入密码登录成功即可。root用户登录需要在配置文件修改Permi开头的参数。

重启操作系统,确认配置持久生效。

说明更新成功。