误卸载 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 包。


相关推荐
wdfk_prog3 小时前
[Linux]学习笔记系列 -- hashtable
linux·笔记·学习
每日出拳老爷子3 小时前
【远程协助】内网 IT 运维远程协助系统的最小可用架构
运维·服务器·远程工作·流媒体·视音频
weixin_462446233 小时前
使用 Puppeteer 设置 Cookies 并实现自动化分页操作:前端实战教程
运维·前端·自动化
CheungChunChiu3 小时前
Linux 内核动态打印机制详解
android·linux·服务器·前端·ubuntu
BlueBirdssh5 小时前
linux 内核通过 dts 设备树 配置pcie 控制器 各种参数和中断等, 那freeRTOS 是通过直接设置PCIe寄存器吗
linux
小目标一个亿5 小时前
Windows平台Nginx配置web账号密码验证
linux·前端·nginx
实战项目5 小时前
软件测试自动化框架的设计与实现
运维·自动化
Aotman_5 小时前
Element-UI Message Box弹窗 使用$confirm方法自定义模版内容,修改默认样式
linux·运维·前端
Elastic 中国社区官方博客6 小时前
使用 Elastic 中的 OpenTelemetry 为 Nginx 实现端到端分布式追踪的实用指南
大数据·运维·分布式·elasticsearch·搜索引擎·信息可视化·全文检索
独自破碎E6 小时前
配置ssh解决https不稳定的问题
运维·ssh