Ubuntu 升级OpenSSH10.2p1与OpenSSL3.5.4版本避坑实践

当前服务器系统版本:

root@csb134:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal

一、准备工作

1.配置国内镜像源

ubuntu 20.04 LTS (focal) 配置如下

deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

ubuntu 22.04 LTS (jammy) 配置如下

deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

2.安装telnet 服务

注意

Telnet 以明文传输数据(包括密码) ,易被窃听⚠️。仅建议在内网测试环境中使用,生产环境务必改用 SSH(端口 22)

在线安装方案

sudo apt update # 更新软件包列表

sudo apt install telnetd xinetd -y # 安装 Telnet 服务端和守护程序

配置 Telnet 服务

写入以下内容(确保 disable = no

sudo vim /etc/xinetd.d/telnet
service telnet {
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}

配置项详细解析

Ubuntu 升级OpenSSH10.2p1与OpenSSL3.5.4版本避坑实践

创建opi账号,此账号用于通过Telnet登录到服务器

useradd -m -s /bin/bash opi
echo 'opi:!QAZ@WSX' | chpasswd

给与opi账号权限

echo "opi ALL=(ALL:ALL) ALL" | sudo tee /etc/sudoers.d/opi-perms
sudo chmod 0440 /etc/sudoers.d/opi-perms # 权限必须为 440

启动服务

/etc/init.d/openbsd-inetd restart

开放防火墙端口(如果firewalld正在运行)

# 允许TCP流量通过23端口
sudo ufw allow 23/tcp

# 重新加载配置使规则生效
sudo ufw reload

#查看telnet服务的默认端口是否启动;
netstat -anpt|grep 23

登陆后切换到root账号

opi@csb136:~$ sudo -i
[sudo] password for opi:
root@csb136:~#

离线安装方案

下载离线包
从 https://packages.ubuntu.com/ 或 https://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/ 下载以下包:

telnetd_0.17+2.5-5ubuntu1_all.deb
inetutils-telnetd_1.9.4-11ubuntu0.2_amd64.deb
xinetd_2.3.15.3-1_amd64.deb

安装依赖包
将下载的 .deb 文件上传到目标机器,按顺序安装:

sudo dpkg -i telnetd_*.deb
sudo dpkg -i inetutils-telnetd_*.deb
sudo dpkg -i xinetd_*.deb

配置并启动服务

同在线安装的步骤

连接测试

本地测试

telnet localhost 23 # 输入用户名/密码尝试登录

远程测试

telnet <服务器IP> 23
#若显示 Connected to... 即成功

补充:Telnet认证方式
本地系统账号登录

Linux/Unix 系统(如 Ubuntu)允许通过本地系统账号登录,例如 root 或普通用户。Telnet 将用户名/密码提交至系统认证模块(如 PAM),验证是否存在该账户。

专用账户登录

网络设备,如华为交换机/路由器采取AAA 模式,必须提前创建专用于 Telnet 的账户,通过以下命令配置

aaa
local-user admin password cipher ***** # 设置密码
local-user admin service-type telnet # 指定服务类型
local-user admin privilege level 15 # 设置权限

企业交换机/路由器通常不开放系统账户(如 root),需管理员手动创建独立账户并通过 VTY 线路绑定认证方式(如 authentication-mode aaa)

密码模式(无需用户名)
authentication-mode password,登录时只需输入预设密码(无需用户名)

所有用户共享同一密码,权限单一,适合低风险环境临时使用。

3.编译环境准备

#1.卸载原openssh
sudo apt-get remove openssh-server openssh-client openssl -y

#2.更新系统
sudo apt update && sudo apt upgrade -y

# 3.安装编译依赖
sudo apt install -y build-essential libedit-dev zlib1g-dev libssl-dev \
libpam0g-dev libselinux1-dev libcap-dev \
wget tar gcc make autoconf automake libtool \
pkg-config checkinstall

二、编译安装OpenSSL

cd /usr/local/src
sudo wget https://github.com/openssl/openssl/releases/download/openssl-3.5.4/openssl-3.5.4.tar.gz
# 内网环境
#sudo wget http://10.1.0.67/softs/openssl-3.5.4.tar.gz
sudo tar -xzf openssl-3.5.4.tar.gz
cd openssl-3.5.4

备份原有库

sudo mv /usr/bin/openssl /usr/bin/openssl-`date +%Y-%m-%d-%H`.bak
sudo mv /usr/lib/x86_64-linux-gnu/libssl.so.1.1 /usr/lib/x86_64-linux-gnu/libssl.so.1.1-`date +%Y-%m-%d-%H`.bak
sudo mv /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1-`date +%Y-%m-%d-%H`.bak

编译安装

定义openssl安装到 /usr/local/ssl 避免覆盖系统

sudo ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib

**********************************************************************
*** ***
*** OpenSSL has been successfully configured ***
*** ***
*** If you encounter a problem while building, please open an ***
*** issue on GitHub <https://github.com/openssl/openssl/issues> ***
*** and include the output from the following command: ***
*** ***
*** perl configdata.pm --dump ***
*** ***
*** (If you are new to OpenSSL, you might want to consult the ***
*** 'Troubleshooting' section in the INSTALL.md file first) ***
*** ***
**********************************************************************

sudo make -j$(nproc)
# 强烈建议运行测试
sudo make test
sudo make install

配置动态链接

怎么做的原因是让系统优先使用新版,且不覆盖原本的文件

# 创建符号链接
sudo ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

#可选
#sudo ln -sf /usr/local/ssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
#sudo ln -sf /usr/local/ssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3

# 更新 ld.so 缓存
echo "/usr/local/ssl/lib64" | sudo tee /etc/ld.so.conf.d/openssl-3.5.4.conf

sudo ldconfig

验证 OpenSSL版本

openssl version
# 输出:OpenSSL 3.5.4 xx xxx xxxx 则证明安装成功

四、编译安装OpenSSH

下载源码

cd /usr/local/src
sudo wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.2p1.tar.gz
## 内网环境
## sudo wget http://10.1.0.67/softs/openssh-10.2p1.tar.gz
sudo tar -xzf openssh-10.2p1.tar.gz
cd openssh-10.2p1

停止OpenSSH服务

注意:以下操作使用telnet 进行,否则会中断与服务器的连接

systemctl stop sshd
pkill -9 sshd

备份原配置

mkdir -p /root/ssh_backup_$(date +%Y%m%d)
rsync -av /etc/ssh /etc/pam.d /usr/sbin/sshd /usr/bin/ssh /root/ssh_backup_$(date +%Y%m%d)/

配置编译

指定 OpenSSL 路径

sudo ./configure \
--prefix=/usr/local/openssh \
--sysconfdir=/etc/ssh \
--with-ssl-dir=/usr/local/ssl \
--with-pam \
--with-zlib \
--with-libedit \
--without-hardening \
--with-privsep-path=/var/lib/sshd

应出现以下内容

PAM is enabled. You may need to install a PAM control file
for sshd, otherwise password authentication may fail.
Example PAM control files can be found in the contrib/
subdirectory

清理旧版本目录

rm -rf /etc/ssh/
rm -rf /usr/bin/sshd
rm -rf /usb/sbin/sshd

编译并安装

sudo make -j$(nproc)
sudo make install

cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen

过程

root@csb136:/usr/local/src/openssh-10.2p1# sudo make install
(cd openbsd-compat && make)
make[1]: Entering directory '/usr/local/src/openssh-10.2p1/openbsd-compat'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/usr/local/src/openssh-10.2p1/openbsd-compat'
/usr/bin/mkdir -p /usr/local/openssh/bin
/usr/bin/mkdir -p /usr/local/openssh/sbin
/usr/bin/mkdir -p /usr/local/openssh/share/man/man1
/usr/bin/mkdir -p /usr/local/openssh/share/man/man5
/usr/bin/mkdir -p /usr/local/openssh/share/man/man8
/usr/bin/mkdir -p /usr/local/openssh/libexec
/usr/bin/mkdir -p -m 0755 /var/lib/sshd
/usr/bin/install -c -m 0755 -s ssh /usr/local/openssh/bin/ssh
/usr/bin/install -c -m 0755 -s scp /usr/local/openssh/bin/scp
/usr/bin/install -c -m 0755 -s ssh-add /usr/local/openssh/bin/ssh-add
/usr/bin/install -c -m 0755 -s ssh-agent /usr/local/openssh/bin/ssh-agent
/usr/bin/install -c -m 0755 -s ssh-keygen /usr/local/openssh/bin/ssh-keygen
/usr/bin/install -c -m 0755 -s ssh-keyscan /usr/local/openssh/bin/ssh-keyscan
/usr/bin/install -c -m 0755 -s sshd /usr/local/openssh/sbin/sshd
/usr/bin/install -c -m 0755 -s sshd-session /usr/local/openssh/libexec/sshd-session
/usr/bin/install -c -m 0755 -s sshd-auth /usr/local/openssh/libexec/sshd-auth
/usr/bin/install -c -m 4711 -s ssh-keysign /usr/local/openssh/libexec/ssh-keysign
/usr/bin/install -c -m 0755 -s ssh-pkcs11-helper /usr/local/openssh/libexec/ssh-pkcs11-helper
/usr/bin/install -c -m 0755 -s ssh-sk-helper /usr/local/openssh/libexec/ssh-sk-helper
/usr/bin/install -c -m 0755 -s sftp /usr/local/openssh/bin/sftp
/usr/bin/install -c -m 0755 -s sftp-server /usr/local/openssh/libexec/sftp-server
/usr/bin/install -c -m 644 ssh.1.out /usr/local/openssh/share/man/man1/ssh.1
/usr/bin/install -c -m 644 scp.1.out /usr/local/openssh/share/man/man1/scp.1
/usr/bin/install -c -m 644 ssh-add.1.out /usr/local/openssh/share/man/man1/ssh-add.1
/usr/bin/install -c -m 644 ssh-agent.1.out /usr/local/openssh/share/man/man1/ssh-agent.1
/usr/bin/install -c -m 644 ssh-keygen.1.out /usr/local/openssh/share/man/man1/ssh-keygen.1
/usr/bin/install -c -m 644 ssh-keyscan.1.out /usr/local/openssh/share/man/man1/ssh-keyscan.1
/usr/bin/install -c -m 644 moduli.5.out /usr/local/openssh/share/man/man5/moduli.5
/usr/bin/install -c -m 644 sshd_config.5.out /usr/local/openssh/share/man/man5/sshd_config.5
/usr/bin/install -c -m 644 ssh_config.5.out /usr/local/openssh/share/man/man5/ssh_config.5
/usr/bin/install -c -m 644 sshd.8.out /usr/local/openssh/share/man/man8/sshd.8
/usr/bin/install -c -m 644 sftp.1.out /usr/local/openssh/share/man/man1/sftp.1
/usr/bin/install -c -m 644 sftp-server.8.out /usr/local/openssh/share/man/man8/sftp-server.8
/usr/bin/install -c -m 644 ssh-keysign.8.out /usr/local/openssh/share/man/man8/ssh-keysign.8
/usr/bin/install -c -m 644 ssh-pkcs11-helper.8.out /usr/local/openssh/share/man/man8/ssh-pkcs11-helper.8
/usr/bin/install -c -m 644 ssh-sk-helper.8.out /usr/local/openssh/share/man/man8/ssh-sk-helper.8
/usr/bin/mkdir -p /etc/ssh
/etc/ssh/ssh_config already exists, install will not overwrite
/etc/ssh/sshd_config already exists, install will not overwrite
/etc/ssh/moduli already exists, install will not overwrite
/usr/local/openssh/sbin/sshd -t -f /etc/ssh/sshd_config

新版本目录

root@csb136:/usr/local/src/openssh-10.2p1# ls /etc/ssh/
total 616K
drwxr-xr-x 2 root root 4.0K Oct 30 14:47 .
drwxr-xr-x 126 root root 12K Oct 30 14:47 ..
-rw-r--r-- 1 root root 568K Oct 30 14:47 moduli
-rw-r--r-- 1 root root 1.5K Oct 30 14:47 ssh_config
-rw------- 1 root root 505 Oct 30 14:47 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 173 Oct 30 14:47 ssh_host_ecdsa_key.pub
-rw------- 1 root root 399 Oct 30 14:47 ssh_host_ed25519_key
-rw-r--r-- 1 root root 93 Oct 30 14:47 ssh_host_ed25519_key.pub
-rw------- 1 root root 2.6K Oct 30 14:47 ssh_host_rsa_key
-rw-r--r-- 1 root root 565 Oct 30 14:47 ssh_host_rsa_key.pub
-rw-r--r-- 1 root root 3.3K Oct 30 14:47 sshd_config

备份的旧版本目录

root@csb136:/usr/local/src/openssh-10.2p1# ls /root/ssh_backup_20251030/ssh
total 556K
drwxr-xr-x 3 root root 4.0K Sep 19 10:47 .
drwxr-xr-x 4 root root 4.0K Oct 30 14:31 ..
-rw-r--r-- 1 root root 494K Sep 23 2022 moduli
-rw-r--r-- 1 root root 1.5K Sep 23 2022 ssh_config
drwxr-xr-x 2 root root 4.0K Apr 11 2025 ssh_config.d
-rw------- 1 root root 1.4K Sep 23 2022 ssh_host_dsa_key
-rw-r--r-- 1 root root 601 Sep 23 2022 ssh_host_dsa_key.pub
-rw------- 1 root root 505 Sep 23 2022 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 173 Sep 23 2022 ssh_host_ecdsa_key.pub
-rw------- 1 root root 399 Sep 23 2022 ssh_host_ed25519_key
-rw-r--r-- 1 root root 93 Sep 23 2022 ssh_host_ed25519_key.pub
-rw------- 1 root root 2.6K Sep 23 2022 ssh_host_rsa_key
-rw-r--r-- 1 root root 565 Sep 23 2022 ssh_host_rsa_key.pub
-rw------- 1 root root 3.3K May 7 10:22 sshd_config
-rw-r--r-- 1 root root 3.2K Oct 20 2023 sshd_config.bak.2023-10-20
-rw-r--r-- 1 root root 3.2K Jan 25 2024 sshd_config.bak.20250507-102203

还原关键文件
我们已经将OpenSSH 10.2p1 采用“隔离安装”方式(避免覆盖系统自带的 OpenSSH),成功编译安装到了自定义前缀/usr/local/openssh/目录,但这样会导致二进制、man 页、配置文件路径都不在标准位置。

要使用新编译的 OpenSSH,就需要把关键文件“还原”到默认路径,否则 ssh, sshd, systemctl restart sshd 等命令还是走旧版本。
Ubuntu 升级OpenSSH10.2p1与OpenSSL3.5.4版本避坑实践

mkdir -p /root/ssh_backup_$(date +%Y%m%d)
rsync -av /etc/ssh /etc/pam.d /usr/sbin/sshd /usr/bin/ssh /root/ssh_backup_$(date +%Y%m%d)/

# 1. 备份系统原有文件(非常重要!)
sudo mv /usr/bin/ssh /usr/bin/ssh.$(date +%Y%m%d)
sudo mv /usr/bin/scp /usr/bin/scp.$(date +%Y%m%d)
sudo mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.$(date +%Y%m%d)
sudo mv /usr/bin/sftp /usr/bin/sftp.$(date +%Y%m%d)
sudo mv /usr/sbin/sshd /usr/sbin/sshd.$(date +%Y%m%d) # 重点

# 2. 创建符号链接(推荐,节省空间,便于切换)
sudo ln -sf /usr/local/openssh/bin/ssh /usr/bin/ssh
sudo ln -sf /usr/local/openssh/bin/scp /usr/bin/scp
sudo ln -sf /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
sudo ln -sf /usr/local/openssh/bin/sftp /usr/bin/sftp
sudo ln -sf /usr/local/openssh/sbin/sshd /usr/sbin/sshd

# 3. 处理 libexec 目录(不同系统路径不同)
# CentOS/RHEL 通常是 /usr/libexec/
# Ubuntu/Debian 通常是 /usr/lib/openssh/
sudo mkdir -p /usr/libexec/openssh
sudo ln -sf /usr/local/openssh/libexec/* /usr/libexec/openssh/ 2>/dev/null || true

# Ubuntu/Debian 额外处理
sudo mkdir -p /usr/lib/openssh
sudo ln -sf /usr/local/openssh/libexec/* /usr/lib/openssh/ 2>/dev/null || true

恢复或编辑配置

sudo cp /root/ssh_backup_20251030/ssh/sshd_config /etc/ssh/sshd_config

# 测试配置文件语法(用新版 sshd)
sudo /usr/local/openssh/sbin/sshd -t -f /etc/ssh/sshd_config

确保权限正确

sudo chown root:root /etc/ssh/sshd_config
sudo chmod 600 /etc/ssh/sshd_config

重启 SSH 服务

sudo systemctl restart ssh
sudo systemctl status ssh

验证升级结果

# 1. 查看 SSH 版本
ssh -V
OpenSSH_10.2p1, OpenSSL 3.5.4 30 Sep 2025

# 2. 查看动态链接库
ldd /usr/sbin/sshd | grep -E "ssl|crypto"
# 应指向 /usr/local/ssl/lib/libcrypto.so.3
libcrypto.so.3 => /usr/local/ssl/lib64/libcrypto.so.3 (0x00007f315c2cc000)

回滚方法

如果服务启动时出现问题,通过以下方法进行回滚恢复原版

# 恢复系统原版
sudo rm /usr/bin/ssh /usr/bin/scp /usr/bin/ssh-keygen /usr/bin/sftp /usr/sbin/sshd
sudo mv /usr/bin/ssh.$(date +%Y%m%d) /usr/bin/ssh
sudo mv /usr/bin/scp.$(date +%Y%m%d) /usr/bin/scp
sudo mv /usr/bin/ssh-keygen.$(date +%Y%m%d) /usr/bin/ssh-keygen
sudo mv /usr/bin/sftp.$(date +%Y%m%d) /usr/bin/sftp
sudo mv /usr/sbin/sshd.$(date +%Y%m%d) /usr/sbin/sshd

sudo systemctl restart sshd

常见问题与解决

root@csb134:/usr/local/ssl# sudo ldconfig -v | grep ssl
/sbin/ldconfig.real: 无法对 /usr/local/lib/x86_64-linux-gnu 进行 stat 操作: 没有那个文件或目录
/sbin/ldconfig.real: 多次给出路径“/usr/lib/x86_64-linux-gnu”
/sbin/ldconfig.real: 多次给出路径“/lib/x86_64-linux-gnu”
/sbin/ldconfig.real: 多次给出路径“/usr/lib/x86_64-linux-gnu”
/sbin/ldconfig.real: 多次给出路径“/usr/lib”
/usr/local/ssl/lib64:
libssl.so.3 -> libssl.so.3
libevent_openssl-2.1.so.7 -> libevent_openssl.so
/sbin/ldconfig.real: /lib/x86_64-linux-gnu/ld-2.31.so is the dynamic linker, ignoring

libssl.so.1.1 -> libssl.so.1.1-2025-10-30-11:21.bak
libssl3.so -> libssl3.so
/sbin/ldconfig.real: 无法对 /lib/libpng.so 进行 stat 操作: 没有那个文件或目录
libxmlsec1-openssl.so.1 -> libxmlsec1-openssl.so.1.2.28

问题1:

libssl.so.3: cannot open shared object file: No such file or directory

root@csb134:/etc/ld.so.conf.d# openssl version
openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory

确认库文件是否存在

首先确认库文件libssl.so.3是否存在

find /usr/local/ssl/ -name "libssl.so.3*"
/usr/local/ssl/lib64/libssl.so.3

  • 若有输出路径:(例如 /usr/local/ssl/lib64/libssl.so.3),继续下一步。
  • 若无输出:重新检查 OpenSSL 安装过程,确保 make install 成功执行。若安装路径错误,需修正路径后重新编译安装
    检查动态库路径配置

    确保配置文件中路径与实际库路径一致

# 确认配置文件内容
cat /etc/ld.so.conf.d/openssl-3.5.4.conf
# 输出应为:/usr/local/ssl/lib 或 /usr/local/ssl/lib64

# 更新链接库缓存
sudo ldconfig -v | grep ssl # 检查是否包含你的路径

验证修复结果

# 检查库是否可加载
ldd /usr/bin/openssl | grep libssl

# 检查 OpenSSL 版本
openssl version

#正常应输出:
OpenSSL 3.5.4 11 Oct 2024 (Library: OpenSSL 3.5.4 11 Oct 2024)

问题2:
/sbin/ldconfig.real: 无法对 /lib/libpng.so 进行 stat 操作: 没有那个文件或目录

问题原因
某个软件包(比如 libpng-dev、imagemagick、php 等)曾创建软链接 /lib/libpng.so 某个真实文件,但真实文件被删除或升级后,软链接变成“死链”。

解决方法
# 1. 找出所有指向不存在文件的 libpng.so 软链接
sudo find /lib /usr/lib -type l -name "libpng.so*" ! -exec test -e {} \; -ls

# 2. 删除它们
sudo find /lib /usr/lib -type l -name "libpng.so*" ! -exec test -e {} \; -delete

# 3. 如果确实需要 libpng,重新安装系统包(可选)
sudo apt install --reinstall libpng16-16 -y
AI写代码
bash
问题3:
无法对 /usr/local/lib/x86_64-linux-gnu 进行 stat 操作

排查所有 ld.so 配置文件
ls /etc/ld.so.conf.d/
-rw-r--r-- 1 root root 38 9月 7 2019 fakeroot-x86_64-linux-gnu.conf
-rw-r--r-- 1 root root 21 10月 30 11:57 openssl-3.5.4.conf
-rw-r--r-- 1 root root 100 4月 15 2020 x86_64-linux-gnu.conf
AI写代码
查看哪些.conf文件都包含 /usr/lib/x86_64-linux-gnu 路径

解决方法
通过排查发现x86_64-linux-gnu.conf文件,第1行路径不存在导致 stat 错误

Ubuntu 20.04 默认没有 /usr/local/lib/x86_64-linux-gnu 目录,这个路径是 multiarch 支持 的标准路径,但 只有在手动创建或安装了对应架构库时才存在

它被写进系统配置文件 ldconfig 每次都尝试扫描发生报错

注释或删除不存在的路径

vim /etc/ld.so.conf.d/x86_64-linux-gnu.conf
# Multiarch support
# /usr/local/lib/x86_64-linux-gnu ← 注释掉这行
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
AI写代码
bash

保存退出。

问题4:
清理旧OpenSSL 的路径,导致 ldconfig 扫描到一个指向备份文件的软链接。libssl.so.1.1 -> libssl.so.1.1-2025-10-30-11:21.bak

查找所有指向 .bak 的软链接
sudo find /usr/lib /lib /usr/local -name "libssl.so.1.1*" -type l
AI写代码
bash
1
root@csb134:/etc/ld.so.conf.d# ls /usr/lib/x86_64-linux-gnu/libssl.
libssl.a libssl.so.1.1-2025-10-30-11:21.bak
libssl.so.1.1 libssl.so.3
AI写代码
bash

删除软连接
sudo rm -f /usr/lib/x86_64-linux-gnu/libssl.so.1.1
AI写代码
bash
清理缓存
清理缓存重建
sudo rm -rf /var/cache/ldconfig/*
sudo ldconfig
AI写代码
bash

验证
sudo ldconfig -v 2>/dev/null | grep libssl

阅读剩余
THE END