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


相关推荐
代码AI弗森4 分钟前
NAS 服务器 vs 普通服务器:一场关于「存储中心」与「计算中心」的系统分工之争
运维·服务器
来鸟 鸣间9 分钟前
linux下ffmpeg源码编译
linux·运维·ffmpeg
赛博云推-Twitter热门霸屏工具13 分钟前
Twitter 自动化与热门霸屏实战:以赛博云推为例的技术解析
运维·自动化·twitter
菜鸟程序猿小章16 分钟前
人大金仓服务器定时备份
运维·服务器
zt1985q21 分钟前
本地部署静态网站生成工具 Vuepress 并实现外部访问
运维·服务器·网络·数据库·网络协议
拾光Ծ24 分钟前
【Linux】文件系统核心(二):深入 Ext2 底层:Block Group 结构 + inode 索引,轻松锁定文件的增删改查
linux·软硬链接·inode·ext2文件系统·block group·文件系统原理·linux面试
楼田莉子25 分钟前
Linux学习:进程信号
linux·运维·服务器·c++·学习
kabcko29 分钟前
Windows10安装Docker
运维·docker·容器
KeeBoom35 分钟前
嵌入式 Linux 应用开发完全手册——阅读笔记14
linux·笔记
看世界的小gui36 分钟前
Jenkins通过CAS接入Maxkey单点登陆
运维·jenkins