HCRM博客

CentOS 8一键升级OpenSSH 9.x,老系统安全升级指南

CentOS8编译升级OpenSSH至9.x:零翻车实录,老系统也能秒变安全堡垒

CentOS8编译升级OpenSSH至9.x

CentOS 8一键升级OpenSSH 9.x,老系统安全升级指南-图1

手里那台跑了好些年的CentOS8,SSH版本还停在7.x,扫一眼漏洞库,心脏都能少跳半拍。甲方爸爸一句“整改”,只能撸袖子自己上。踩坑一夜,把血泪步骤压成这篇,照着敲,包你天亮前收工。

先别急着动手,把退路留好

第一要务:留一条不死的SSH口。开一台临时小机,配个iptables转发,把2222端口流量转到本机22;或者干脆开云服务器的VNC控制台,真翻车还能爬进去救命。再拍一份快照,磁盘快照比后悔药便宜。

依赖一次装全,省得编译报缺

CentOS8默认仓库里,gcc、make、automake这些都有,但OpenSSH9.x新加了openssl-1.1.1+硬需求,系统自带版本不够。先整一套:

dnf install -y gcc make automake openssl-devel zlib-devel pam-devel wget tar

CentOS 8一键升级OpenSSH 9.x,老系统安全升级指南-图2

如果提示缺kernel-headers,别纠结,一起拉进来,省得后面编译pam时哭。

源码三件套:openssh、openssl、zlib

去官网拉最新tar包,别用git快照,稳定版最香。我下的是openssh-9.4p1.tar.gz、openssl-1.1.1u.tar.gz、zlib-1.2.13.tar.gz。统一放在/usr/local/src,好找。

重点:把旧配置先备份。

cp -a /etc/ssh /etc/ssh.bak.$(date +%s)

别偷懒,少这一步,回滚时想撞墙。

CentOS 8一键升级OpenSSH 9.x,老系统安全升级指南-图3

编译zlib:最轻量,却最容易被忽视

cd /usr/local/src

tar xf zlib-1.2.13.tar.gz

cd zlib-1.2.13

./configure --prefix=/usr/local/zlib

make -j$(nproc) && make install

装完顺手写个软链,省得后面configure找不到:

echo '/usr/local/zlib/lib' > /etc/ld.so.conf.d/zlib.conf && ldconfig

编译openssl:别装到系统目录,避免把yum的openssl顶掉

cd /usr/local/src

tar xf openssl-1.1.1u.tar.gz

cd openssl-1.1.1u

./config --prefix=/usr/local/openssl --shared zlib

make -j$(nproc) && make install

装完把pkgconfig路径喂给shell:

echo 'export PKGCONFIGPATH=/usr/local/openssl/lib/pkgconfig:$PKGCONFIGPATH' >> /etc/profile.d/openssl.sh

source /etc/profile.d/openssl.sh

编译openssh:把新openssl和zlib绑死

cd /usr/local/src

tar xf openssh-9.4p1.tar.gz

cd openssh-9.4p1

./configure --prefix=/usr/local/openssh \

--with-ssl-dir=/usr/local/openssl \

--with-zlib=/usr/local/zlib \

--with-pam \

--with-md5-passwords \

--with-4in6 \

--disable-strip

看到“PAM support: yes”再往下走,否则登录会跪。

make -j$(nproc) && make install

配置:别直接覆盖,先并行跑

新二进制丢到/usr/local/openssh,老的在/usr/sbin,井水不犯河水。先改端口,别让新旧冲突:

cp /etc/ssh/sshdconfig /usr/local/openssh/etc/sshdconfig

vim /usr/local/openssh/etc/sshd_config

把Port改成2222,PermitRootLogin设成prohibit-password,PubkeyAuthentication yes,PasswordAuthentication no,按自己规矩调。保存后启动新服务:

/usr/local/openssh/sbin/sshd -f /usr/local/openssh/etc/sshd_config -t

测试配置没报错,再:

/usr/local/openssh/sbin/sshd -f /usr/local/openssh/etc/sshd_config -p 2222

另开窗口,ssh -p 2222 本机IP,能进说明新包OK。

收尾:把旧服务踢掉,新服务扶正

systemctl停掉老sshd:

systemctl stop sshd

systemctl disable sshd

写个新unit文件,别直接改老文件,方便回滚:

cat > /etc/systemd/system/sshd9.service <<'EOF'

[Unit]

Description=OpenSSH 9.x Server

After=network.target

[Service]

ExecStart=/usr/local/openssh/sbin/sshd -D -f /usr/local/openssh/etc/sshd_config

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

RestartSec=42s

[Install]

WantedBy=multi-user.target

EOF

systemctl daemon-reload

systemctl enable --now sshd9

确认端口已切回22:

netstat -tunlp | grep sshd

看到新进程占22,旧进程消失,收工。

常见翻车点速查

1. 编译完一启动就报“no hostkeys”,那是缺少ssh-keygen,/usr/local/openssh/bin/ssh-keygen -A一把梭。

2. 登录提示“Permission denied (publickey)”,99%是权限问题,chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorizedkeys

3. SELinux拦端口,setsebool -P sshchrootrwhomedirs on,或者干脆临时setenforce 0验证。

一键回滚脚本,真出事能救命

#!/bin/bash

systemctl stop sshd9

systemctl disable sshd9

systemctl enable sshd

systemctl start sshd

echo '已回滚至旧版sshd'

扔在/root/rollback.sh,chmod +x,真香。

升级后别忘了的小动作

把新路径写进环境变量,省得以后敲全路径:

echo 'export PATH=/usr/local/openssh/bin:$PATH' >> ~/.bashrc

客户端也能享受新版本带来的ssh -Q cipher算法列表,一眼看尽安全度。

至此,CentOS8老骥伏枥,SSH版本直奔9.x,漏洞扫描报告一片绿油油,甲方爸爸闭嘴,运维也能睡整觉。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/42001.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~