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

相关推荐
悄悄敲敲敲2 小时前
Linux:进程间通信->共享内存
linux·运维·服务器
绵绵细雨中的乡音2 小时前
Linux进程学习【环境变量】&&进程优先级
linux·运维·学习
天下·第二2 小时前
【Nginx】负载均衡配置详解
运维·nginx·负载均衡
GanGuaGua3 小时前
linux:进程的替换
linux·运维·服务器
蓝易云3 小时前
在Linux、CentOS7中设置shell脚本开机自启动服务
前端·后端·centos
梓䈑3 小时前
【Linux系统】详解Linux权限
linux·运维·bash
小茬粥3 小时前
kvm网卡发现的采集信息脚本COLT_CMDB_KVM_NETDISC.sh
linux·kvm
Mr_sun.4 小时前
Day23-Web开发——Linux
linux·运维·服务器
星雨流星天的笔记本4 小时前
1、Linux操作系统下,ubuntu22.04版本切换中英文界面
linux·学习
极小狐4 小时前
如何创建并使用极狐GitLab 部署令牌?
运维·git·ssh·gitlab·github