误卸载 openssl-libs 的补救方法

文章目录

误卸载 openssl-libs 的补救方法

问题概述

在升级 openssl 时,如果不小心误卸载了 openssl-libs,会导致系统绝大多数命令(如 curlwgetyumrpmscp 等)失效。这是因为这些工具依赖于 OpenSSL 的动态链接库。只要还能进入系统 shell(即使只有 lscatecho 等基本命令),就有办法恢复。

关键点 :恢复的核心是如何将缺失的库文件传输到系统中。如果 wgetcurl 仍可用,可直接下载;否则需通过外部介质传输。

典型报错信息

执行命令时可能会出现以下类似错误:

复制代码
rpm: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

或更长的 Python 调用栈错误,最终指向:

复制代码
ImportError: libssl.so.1.1: cannot open shared object file: No such file or directory

这表明系统缺少 libcrypto.so.1.1libssl.so.1.1 这两个关键共享库文件。


恢复前准备

从一台相同或相似系统的正常机器上,找到以下两个文件:

  • libcrypto.so.1.1
  • libssl.so.1.1

它们通常位于 /usr/lib64/ 目录下,也可使用以下命令查找:

bash 复制代码
find / -name "libcrypto.so.1.1" 2>/dev/null
find / -name "libssl.so.1.1" 2>/dev/null

将这两个文件复制到 U 盘或其它可移动存储介质中。


解决方案一:通过 U 盘恢复(适用于物理机/虚拟机可挂载介质)

步骤 1:挂载 U 盘

  1. 插入 U 盘。

  2. 查看块设备信息,确认 U 盘设备名(如 /dev/sda1):

    bash 复制代码
    lsblk
  3. 创建挂载点并挂载:

    bash 复制代码
    mkdir -p /mnt/usb
    mount /dev/sda1 /mnt/usb

步骤 2:创建临时软链接

将 U 盘中的库文件软链接到系统库目录,使基础命令暂时可用:

bash 复制代码
ln -sf /mnt/usb/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
ln -sf /mnt/usb/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ldconfig

步骤 3:重新安装 openssl-libs

如果系统 yum/dnf 源可用,建议直接使用包管理器安装,以自动处理依赖关系:

bash 复制代码
dnf install -y openssl-libs
# 或
yum install -y openssl-libs

如果网络源不可用,但 U 盘中有对应版本的 RPM 包,也可使用 rpm 安装:

bash 复制代码
rpm -ivh /mnt/usb/openssl-libs-*.rpm

步骤 4:卸载 U 盘并验证

bash 复制代码
umount /mnt/usb
# 测试命令是否恢复正常
[root@TencentOS ~]# curl --version
curl 7.61.1 (x86_64-koji-linux-gnu) libcurl/7.61.1 OpenSSL/1.1.1k zlib/1.2.11 brotli/1.0.6 libidn2/2.2.0 libpsl/0.20.2 (+libidn2/2.2.0) libssh/0.9.6/openssl/zlib nghttp2/1.33.0
Release-Date: 2018-09-05
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz brotli TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL
[root@TencentOS ~]#
[root@TencentOS ~]# rpm --version
RPM 版本 4.14.3
[root@TencentOS ~]#

解决方案二:通过带外管理恢复(适用于物理服务器)

如果服务器支持 IPMI / iDRAC / iLO / BMC 等带外管理功能,可通过虚拟介质挂载文件。

操作步骤:

  1. 登录服务器的带外管理界面(如 https://<BMC_IP>)。

  2. 进入【虚拟介质】或【远程控制台】→【虚拟 KVM】。

  3. 在本地电脑准备好 libcrypto.so.1.1libssl.so.1.1 文件。

  4. 在带外界面中挂载本地 ISO 或 USB 镜像(部分支持直接映射文件夹)。

  5. 在服务器控制台中挂载该虚拟介质:

    bash 复制代码
    mkdir -p /mnt/cdrom
    mount /dev/sr0 /mnt/cdrom   # 如果是光驱
    # 或
    mount /dev/sdb1 /mnt/usb    # 如果是USB设备
  6. 复制文件并重新安装:

    bash 复制代码
    cp /mnt/cdrom/libcrypto.so.1.1 /usr/lib64/
    cp /mnt/cdrom/libssl.so.1.1 /usr/lib64/
    ldconfig
    dnf install -y openssl-libs

恢复步骤总结

  1. 挂载外部介质(U盘、虚拟光驱等)。
  2. 临时链接库文件/usr/lib64/,使系统命令暂时可用。
  3. 重新安装 openssl-libs(推荐使用 yum/dnf 自动解决依赖)。
  4. 验证恢复,测试常用命令是否正常工作。

预防措施

  • 在升级 openssl 或相关组件时,仔细确认卸载列表,避免勾选 openssl-libs
  • 重要操作前可先备份系统或创建快照(虚拟机/容器环境下)。
  • 可使用 rpm -q openssl-libs 确认该包是否存在,避免误删。

附:常见问题

Q:如果连 lnmount 命令都失效怎么办?

A:此时系统可能已严重损坏,建议从救援模式(Rescue Mode)或Live CD启动,挂载原系统根分区,然后手动复制库文件或重装包。

Q:库文件版本不匹配怎么办?

A:尽量从相同发行版、相同版本的系统获取对应版本的库文件,或直接安装对应版本的 openssl-libs RPM 包。


相关推荐
PFinal社区_南丞2 小时前
服务器进程日志分析:从头皮发麻到AI解救
运维·后端
G_H_S_3_2 小时前
【网络运维】Docker网络:基础与实战
linux·运维·网络·docker
加藤不太惠2 小时前
docker简单了解使用
运维·docker·容器
嵌入式学习和实践2 小时前
Linux/Windows 系统架构查看、安装包选择指南(嵌入式开发场景适配)
linux·windows·系统架构
小安运维日记2 小时前
RHCA - DO374 | Day09:自定义内容集和执行环境
linux·运维·服务器·系统架构·ansible·改行学it
TAEHENGV2 小时前
提醒历史模块 Cordova 与 OpenHarmony 混合开发实战
运维·服务器
虾..2 小时前
Linux 进程间通信---命名管道
linux·运维·服务器
小宇的天下2 小时前
Calibre DESIGNrev DRC/LVS启动和准备文件(10-2)
linux·运维·lvs
一只旭宝3 小时前
Linux专题五:fork函数进阶,其在内存,进程上的关系,以及进程替换
linux