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

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

当前服务器系统版本

bash 复制代码
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) 配置如下
bash 复制代码
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) 配置如下
bash 复制代码
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)

在线安装方案
bash 复制代码
sudo apt update  # 更新软件包列表

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

配置 Telnet 服务

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

bash 复制代码
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
}
配置项详细解析
配置参数 说明与意义 必要性/用途
disable = no 核心开关:设置为 no 表示启用该服务yes 表示禁用)。 ✅ 若不设为 no,则 Telnet 服务无法响应连接请求,如同未安装。
flags = REUSE 允许多个连接复用同一端口,提升端口资源使用率。 ⚙️ TCP 协议优化选项,对于高并发场景有实际意义,默认配置即可。
socket_type = stream 基于流式 TCP 协议(区别于 UDP 数据报),保障数据的可靠传输。 ✅ Telnet 基于 TCP,必须设为 stream
wait = no 并行处理 多个客户端连接(若设为 yes 则每次只接受一个连接)。 ✅ 避免因单用户占用导致其他用户无法登录,需设成 no 实现并发处理
user = root Telnet 服务进程在系统内以 root 权限运行 ⚠️ 高安全风险!即使连接用户非 root,运行服务的进程权限为 root 可能导致权限漏洞。建议改为低权限用户(如 nobody),但需注意部分功能受限。
server = /usr/sbin/in.telnetd 服务程序路径 :指定执行 Telnet 服务的守护程序(in.telnetd)。 ✅ 关键路径设置,程序缺失需安装 telnetd
log_on_failure += USERID 登录失败时在系统日志中记录发起失败尝试的用户名(若可获取)。 🔍 增强安全审计能力,辅助排查攻击源。

xinetd 统一管理系统服务(如 Telnet),配置必须声明协议行为(如 socket_type=stream)来正确转发端口流量

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

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

给与opi账号权限

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

启动服务

bash 复制代码
/etc/init.d/openbsd-inetd restart 

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

bash 复制代码
# 允许TCP流量通过23端口
sudo ufw allow 23/tcp

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


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

登陆后切换到root账号

bash 复制代码
opi@csb136:~$ sudo -i
[sudo] password for opi:
root@csb136:~#
离线安装方案

下载离线包

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

(需根据系统架构选择 amd64arm64 版本)

bash 复制代码
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 文件上传到目标机器,按顺序安装:

bash 复制代码
sudo dpkg -i telnetd_*.deb
sudo dpkg -i inetutils-telnetd_*.deb
sudo dpkg -i xinetd_*.deb

若提示依赖缺失,用 sudo apt --fix-broken install 修复

配置并启动服务

同在线安装的步骤

连接测试

本地测试

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

远程测试

bash 复制代码
telnet <服务器IP> 23
#若显示 Connected to... 即成功
补充:Telnet认证方式
本地系统账号登录

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

专用账户登录

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

bash 复制代码
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.编译环境准备

bash 复制代码
#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

注意:Ubuntu 20.04 依赖 OpenSSL 1.1.1,升级到 3.5.4 后需确保兼容性(大多数软件支持 OpenSSL 3)。

下载源码

bash 复制代码
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

备份原有库

bash 复制代码
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 避免覆盖系统

bash 复制代码
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

配置动态链接

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

bash 复制代码
# 创建符号链接
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版本

bash 复制代码
openssl version
# 输出:OpenSSL 3.5.4  xx xxx xxxx 则证明安装成功

四、编译安装OpenSSH

下载源码

bash 复制代码
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 进行,否则会中断与服务器的连接

bash 复制代码
systemctl stop sshd
pkill -9 sshd

备份原配置

bash 复制代码
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 路径

bash 复制代码
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

--with-ssl-dir=/usr/local/ssl 确保使用我们编译的 OpenSSL 3.5.4

应出现以下内容

bash 复制代码
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

清理旧版本目录

bash 复制代码
rm -rf /etc/ssh/ 
rm -rf /usr/bin/sshd
rm -rf /usb/sbin/sshd

编译并安装

bash 复制代码
sudo make -j$(nproc)
sudo make install

注意:make install 会覆盖:

  • /usr/sbin/sshd
  • /usr/bin/ssh, scp, sftp 等
  • /etc/ssh/sshd_config(会备份为 sshd_config.install)
bash 复制代码
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

过程

bash 复制代码
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

新版本目录

bash 复制代码
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

备份的旧版本目录

bash 复制代码
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 等命令还是走旧版本。

新安装路径 标准系统路径 操作建议
/usr/local/openssh/bin/ssh /usr/bin/ssh 备份旧的 → 链接或复制
/usr/local/openssh/bin/scp /usr/bin/scp 同上
/usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen 同上
/usr/local/openssh/bin/sftp /usr/bin/sftp 同上
/usr/local/openssh/sbin/sshd /usr/sbin/sshd 重点!
/usr/local/openssh/libexec/* /usr/libexec//usr/lib/openssh/ 视系统而定
/usr/local/openssh/share/man/ /usr/share/man/ 可选,man 页
bash 复制代码
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

恢复或编辑配置

bash 复制代码
sudo cp /root/ssh_backup_20251030/ssh/sshd_config /etc/ssh/sshd_config
bash 复制代码
# 测试配置文件语法(用新版 sshd)
sudo /usr/local/openssh/sbin/sshd -t -f /etc/ssh/sshd_config

确保权限正确

bash 复制代码
sudo chown root:root /etc/ssh/sshd_config
sudo chmod 600 /etc/ssh/sshd_config

重启 SSH 服务

bash 复制代码
sudo systemctl restart ssh
sudo systemctl status ssh

验证升级结果

bash 复制代码
# 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)

回滚方法

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

bash 复制代码
# 恢复系统原版
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

常见问题与解决

bash 复制代码
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

bash 复制代码
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是否存在

bash 复制代码
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 成功执行。若安装路径错误,需修正路径后重新编译安装

检查动态库路径配置

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

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

# 更新链接库缓存
sudo ldconfig -v | grep ssl  # 检查是否包含你的路径
验证修复结果
bash 复制代码
# 检查库是否可加载
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 某个真实文件,但真实文件被删除或升级后,软链接变成"死链"。

解决方法
bash 复制代码
# 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

问题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

查看哪些.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 每次都尝试扫描发生报错

注释或删除不存在的路径

bash 复制代码
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

保存退出。

问题4:

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

查找所有指向 .bak 的软链接
bash 复制代码
sudo find /usr/lib /lib /usr/local -name "libssl.so.1.1*" -type l
bash 复制代码
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
删除软连接
bash 复制代码
sudo rm -f /usr/lib/x86_64-linux-gnu/libssl.so.1.1
清理缓存
bash 复制代码
清理缓存重建
sudo rm -rf /var/cache/ldconfig/*
sudo ldconfig
验证
bash 复制代码
sudo ldconfig -v 2>/dev/null | grep libssl

原始文章https://www.rzzz.net/daily-notes/2025/2025-10-30.html

相关推荐
qq_5470261794 小时前
微服务 - 网关统一鉴权
运维·网络·微服务
梁正雄4 小时前
18、docker-macvlan-2-示例
运维·docker·容器·macvlan
梁正雄4 小时前
17、docker-macvlan-1-理论
运维·docker·macvlan·docker macvlan
唐兴通个人4 小时前
新品上市咨询顾问新药上市顾问培训讲师唐兴通讲PMF从0到1天使用户种子用户冷启动问题
运维·服务器
尘缘浮梦4 小时前
RobotFramework框架环境搭建
linux·开发语言·python
江公望5 小时前
linux kernel struct clk_init_data结构浅解
linux
LCG元5 小时前
Sed 和 Awk 的终极实战:用一行命令搞定90%的文本处理
linux
serve the people5 小时前
Partial Prompt Templates in LangChain
服务器·langchain·prompt
NO.10245 小时前
11.4八股
java·linux·数据库