CentOS 7 离线升级 OpenSSH

CentOS 7 离线升级 OpenSSH

在 CentOS 7 系统中进行 OpenSSH 9.9b2 版本的离线安装,需先在能联网的环境下下载所需的依赖包和 OpenSSH 源码包,再将这些文件传输到离线的 CentOS 7 系统中进行安装。

一、所需依赖

二、联网环境下的准备工作

(一)安装编译依赖工具

在联网的 CentOS 7 系统上,使用以下命令安装编译所需的基本工具,并检查相关工具的版本信息:

bash

复制代码
yum install -y wget gcc make pam-devel zlib-devel openssl-devel

由于 Openssl 版本过低,需重新安装 3.3.3 版本,可从Downloads | OpenSSL Library下载。

(二)备份或重命名旧版本

在继续之前,先备份或重命名旧的 OpenSSL 安装目录,以便在新版本安装出错时恢复:

bash

复制代码
sudo mv /usr/local/openssl /usr/local/openssl_backup

(三)下载并解压新版本

  1. 卸载现有的 OpenSSL:

bash

复制代码
sudo yum remove openssl openssl-devel
  1. 清理残留文件,确保所有相关的配置文件和缓存被删除:

bash

复制代码
sudo rm -rf /etc/ssl
sudo rm -rf /usr/local/ssl
  1. 从源代码编译安装 OpenSSL:
    • 可以从 OpenSSL 官方网站下载最新的源代码包,然后拖进 centos7 中,再进行解压和安装。
    • 也可使用 wget 命令直接下载:

bash

复制代码
wget https://www.openssl.org/source/openssl-3.3.3.tar.gz
  1. 解压下载的文件:

bash

复制代码
tar -xzvf openssl-3.3.3.tar.gz
  1. 配置和编译:

bash

复制代码
cd openssl-3.3.3
./config
make && make install
  1. 更新库缓存:

bash

复制代码
sudo ldconfig

(四)验证安装

通过以下命令验证 OpenSSL 是否成功安装:

bash

复制代码
openssl version

若显示了 OpenSSL 的版本信息,则说明安装成功。还可以使用以下命令进一步查看相关信息:

  1. 查看 openssl 版本信息。
  2. 查看 openssl 的可执行文件的位置:

bash

复制代码
which openssl
  1. 使用 ldd 检查:

bash

复制代码
ldd /usr/local/openssl/bin/openssl

(五)解决安装问题

  1. 关联库找不到问题:如果遇到关联库找不到问题,可检查库的引用路径是否正确:

bash

复制代码
ldd $(which openssl)

若执行该命令后出现 "not found",代表对应的库找不到。此时,可在配置文件~/.bashrc~/.zshrc中,把库的地址指向解压后的源码路径/usr/local/src/openssl-3.3.3,即添加以下内容:

bash

复制代码
export LD_LIBRARY_PATH="/usr/local/src/openssl-3.3.3:$LD_LIBRARY_PATH"

然后使用以下命令使环境变量更改生效:

bash

复制代码
source ~/.bashrc
  1. 找不到可执行文件路径问题 :如果 openssl 安装时提示找不到可执行文件路径 "bash: /usr/bin/openssl: No such file or directory",可手动在配置文件~/.bashrc~/.zshrc中把可执行文件的地址指向which openssl命令查询出来的路径/usr/local/bin/openssl,即添加以下内容:

bash

复制代码
export PATH=$PATH:/usr/local/bin

使用以下命令使环境变量更改生效:

bash

复制代码
source ~/.bashrc

三、离线安装

(一)清除之前安装的 sshd 文件

使用以下命令清除之前安装的 sshd 相关文件:

bash

复制代码
rpm -e --nodeps openssh
rpm -e --nodeps openssh-server
rpm -e --nodeps openssh-clients
cd ..
ls

(二)下载并解压 OpenSSH 源码

  1. 从 OpenSSH 官方网站或其镜像站点下载 OpenSSH 9.9.1 的源码包:

bash

复制代码
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
  1. 解压源码包:

bash

复制代码
tar -xzf openssh-9.9p1.tar.gz
cd openssh-9.9p1

(三)配置编译环境

使用以下命令配置编译环境:

bash

复制代码
./configure --prefix=/usr/local/openssh9.9 --sysconfdir=/etc/ssh --with-md5-passwords --with-privsep-path=/var/lib/sshd

常用配置选项解释:

  • --prefix=/usr/local/openssh9.9:指定安装路径。
  • --sysconfdir=/etc/ssh:指定配置文件目录。
  • --with-md5-passwords:启用 MD5 密码支持。
  • --with-privsep-path=/var/lib/sshd:指定特权分离路径。

(四)编译并安装源码

bash

复制代码
make && make install

(五)配置 SSH 服务

  1. 创建必要的目录和文件:

bash

复制代码
sudo mkdir -p /var/lib/sshd
sudo touch /var/log/secure
sudo chown root:root /var/log/secure
sudo chmod 0600 /var/log/secure
  1. 编辑 SSH 配置文件vi /etc/ssh/sshd_config,确保包含以下基本配置:

bash

复制代码
Port 22
Protocol 2
PermitRootLogin yes
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/local/openssh9.9/libexec/sftp-server

注意:Subsystem需设置为安装的 openssh9.9 的路径;PermitRootLogin不建议设置为yes,但设置为yes更方便远程操作。

(六)启动 SSH 服务并设置开机自启

bash

复制代码
sudo /usr/local/openssh9.9/sbin/sshd -f /etc/ssh/sshd_config

若出现 "error while loading shared libraries: libcrypto.so.3: cannot open shared object file: No such file or directory",则直接修改动态链接库配置文件vi /etc/ld.so.conf,将 openssl 安装包中的链接路径放入(也可使用find /usr -name "libcrypto.so*"查看与该库相关的文件所在的文件夹,放入该文件夹路径),保存文件后执行ldconfig使动态链接库实时生效。

(七)检查 sshd 服务状态

使用以下命令检查 sshd 服务的状态:

bash

复制代码
sudo systemctl status sshd

若没有 "fail",则代表正常。否则,按以下几点排查问题:

  1. 若出现 "Failed to enable unit: Unit file sshd.service does not exist",代表sshd.service未能创建成功,需手动创建sshd.service服务,编辑vi /etc/systemd/system/sshd.service,填充内容如下

bash

复制代码
[Unit]
Description=OpenSSH server daemon
After=network.target

[Service]
ExecStart=/usr/local/openssh9.9/sbin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

其中,ExecStart为 sshd 可执行文件的位置。

  1. 创建或修改sshd.service文件后,重新加载系统守护进程并启动 SSH 服务:

bash

复制代码
sudo systemctl daemon-reload
sudo systemctl start sshd
sudo systemctl enable sshd
sudo systemctl restart sshd
  1. 若仍然启动不了,可能是端口占用,使用以下命令查看 22 端口的 PID:

bash

复制代码
sudo netstat -tulnp | grep :22

再使用kill -9 PID杀死端口,然后使用以下命令重启 sshd 服务:

bash

复制代码
sudo systemctl restart sshd
  1. 再次检查 SSH 服务状态:

bash

复制代码
sudo systemctl status sshd

若没有 "fail",则代表正常。

相关推荐
神梦流1 小时前
GE 引擎的非标准数据流处理:稀疏张量与自定义算子在图优化中的语义保持
linux·运维·服务器
兜兜转转了多少年1 小时前
从脚本到系统:2026 年 AI 代理驱动的 Shell 自动化
运维·人工智能·自动化
.小墨迹2 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
Lsir10110_2 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
Sheffield2 小时前
command和shell模块到底区别在哪?
linux·云计算·ansible
历程里程碑2 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
郝学胜-神的一滴2 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
承渊政道2 小时前
Linux系统学习【Linux系统的进度条实现、版本控制器git和调试器gdb介绍】
linux·开发语言·笔记·git·学习·gitee
技术路上的探险家2 小时前
Ubuntu下Docker与NVIDIA Container Toolkit完整安装教程(含国内源适配)
linux·ubuntu·docker
代码AC不AC3 小时前
【Linux】深入理解缓冲区
linux·缓冲区·标准错误