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

相关推荐
差点GDP2 小时前
常用 Linux Shell 命令
linux
Timememory8292 小时前
配置DNS主从服务
运维·服务器
时光不去2 小时前
java接口自动化之allure本地生成报告
运维·笔记·自动化
z202305084 小时前
Linux之vmlinux文件段布局和arm64 的链接脚本vmlinux.lds.S分析
linux·运维·服务器
濊繵5 小时前
Linux网络-Socket 编程 UDP
linux·网络·udp
北京阿法龙科技有限公司6 小时前
AR眼镜基于上下文智能识别:电力运维高效规范操作应用方案|阿法龙XR云平台
运维·ar·xr
hhhh明6 小时前
quest2+alvr+steamvr
linux·windows·quest2
RisunJan7 小时前
docker一键部署项目
运维·docker·容器
luyun0202027 小时前
Windows 11操作更丝滑,绝了
java·运维·figma
dqsh067 小时前
树莓派5+Ubuntu24.04 LTS CH348 / CH9344 驱动安装 保姆级教程
linux·c语言·单片机·嵌入式硬件·iot