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",则代表正常。

相关推荐
lemon31062442 分钟前
dockerfile制作镜像
linux·运维·服务器·学习
易保山1 小时前
MIT6.S081 - Lab5 Lazy(延迟分配)
linux·操作系统·c
AI享网无代码创作1 小时前
WP Mail 邮件发送:WordPress Mail SMTP设置
运维·服务器·网络
想躺在地上晒成地瓜干2 小时前
树莓派超全系列文档--(14)无需交互使用raspi-config工具其一
linux·树莓派·raspberrypi·树莓派教程
Shier833_Ww2 小时前
目标识别与双目测距(1)环境搭建:Ubuntu+yolov5+pcl库
linux·yolo·ubuntu
唐青枫3 小时前
Linux 历史命令操作教程
linux
愚润求学4 小时前
Linux基础指令(一)
linux·服务器·语法
struggle20254 小时前
AWS Bedrock 多代理蓝图存储库使用 CDK、Streamlit 和 LangFuse 运行 AWS Bedrock 多代理 AI 协作的蓝图
运维·人工智能·自动化·云计算·aws
IEVEl4 小时前
CentOS 7 安装 EMQX (MQTT)
linux·运维·centos
好多知识都想学4 小时前
Centos 7 搭建 jumpserver 堡垒机
linux