OpenSSL && OpenSSH升级

(基于Centos,其他Linux版本大同小异)

升级前,需要备份旧的数据,以备升级失败进行回滚。

 # 如原有目录存在,需要进行备份。
 mv /usr/local/openssh /usr/local/openssh.bak
 mv /usr/local/openssh /usr/local/openssl.bak

一、升级OpenSSL

# 安装依赖
yum -y install zlib-devel pam-devel gcc openssl-devel perl-Test-Harness perl-Test-Simple  perl-IPC-Cmd
# 下载源码包
cd /usr/local/src/
wget --no-check-certificate https://github.com/openssl/openssl/releases/download/openssl-3.4.0/openssl-3.4.0.tar.gz
tar zxvf openssl-3.4.0.tar.gz
cd openssl-3.4.0
# 编译源码包
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
make -j `nproc`
make install
# 如有,备份原有配置文件
mv /etc/ld.so.conf.d/openssl-1.1.1t.conf /etc/ld.so.conf.d/openssl-1.1.1t.conf.bak 
# 更新动态链接库的链接器程序缓存
echo '/usr/local/openssl/lib64' >> /etc/ld.so.conf.d/openssl-3.4.0.conf
/sbin/ldconfig -v
# 卸载系统原有的openssl,卸载的时候会带走原有的二进制文件数据以及相关文件,提前备份(如有)
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
mv /usr/lib64/libssl.so /usr/lib64/libssl.so.bak
mv /usr/lib64/libcrypto.so /usr/lib64/libcrypto.so.bak
# rpm -e `rpm -qa|grep openssl` --nodeps
# 链接编译后的文件
ln -bs /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl/include/openssl/ /usr/include/openssl
ln -sf /usr/local/openssl/lib64/libssl.so /usr/lib64/libssl.so
ln -sf /usr/local/openssl/lib64/libcrypto.so /usr/lib64/libcrypto.so
# 验证版本
openssl version

二、升级OpenSSH

# 安装依赖
yum -y install zlib-devel pam-devel gcc openssl-devel perl-Test-Harness perl-Test-Simple
# 下载源码包
cd /usr/local/src/
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
tar zxvf ./openssh-9.9p1.tar.gz
cd openssh-9.9p1/
# 备份旧的配置文件(很重要),否则后面ssh无法正常启动。
cp -rf /etc/ssh /etc/ssh.bak
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
cp /etc/sysconfig/sshd /etc/sysconfig/sshd.bak
# 编译源码,编译后注意返回的结果,会出现原有的sshd_config的配置与现有版本不兼容,根据提示进行相应的sshd_conifg的修改
./configure --prefix=/usr/local/openssh --with-pam --with-selinux --with-zlib --sysconfdir=/etc/ssh --with-kerberos5=/usr/lib64/libkrb5.so --with-ssl-dir=/usr/local/openssl
make -j `nproc`
make install
# 卸载旧的系统自带的ssh
rpm -e `rpm -qa|grep openssh` --nodeps
# 链接新的openssh文件
ln -sf /usr/local/openssh/bin/ssh /usr/bin/ssh
ln -sf /usr/local/openssh/bin/scp /usr/bin/scp
ln -sf /usr/local/openssh/bin/sftp /usr/bin/sftp
ln -sf /usr/local/openssh/sbin/sshd /usr/sbin/sshd
ln -sf /usr/local/openssh/bin/ssh-add /usr/bin/ssh-add
ln -sf /usr/local/openssh/bin/ssh-agent /usr/bin/ssh-agent
ln -sf /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
ln -sf /usr/local/openssh/bin/ssh-keyscan /usr/bin/ssh-keyscan
ln -sf /usr/local/openssh/libexec /usr/libexec/openssh
# 创建新的ssh的systemd服务
echo "[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.servicecp -0p
Wants=sshd-keygen.service

[Service]
#Type=notify
EnvironmentFile=/etc/sysconfig/sshd
#ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecStart=/usr/local/openssh/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target" > /usr/lib/systemd/system/sshd.service
# 恢复旧的配置文件
mv /etc/ssh /etc/ssh.orig
cp -rf  /etc/ssh.bak /etc/ssh
chmod 0600 /etc/ssh/ssh_host*_key
cp /etc/sysconfig/sshd.bak /etc/sysconfig/sshd
cp /etc/pam.d/sshd.bak /etc/pam.d/sshd
# 启动sshd服务
systemctl daemon-reload
systemctl enable sshd
systemctl restart sshd
# 验证sshd服务,验证状态,并且不要关闭当前ssh终端,先重新开一个新的终端进行连接,验证正常后方可正常关闭。
systemctl status sshd
ssh -V

以下为编译openssh返回的结果,提示UsePrivilegeSeparation此配置已弃用。对应进行sshd_config配置的修改。

image-20250324165347828