OpenSSL + OpenSSH 两套安装方案(覆盖系统目录 / 独立目录)

  1. 覆盖系统目录(教程通用、直接替换系统旧版本)
  2. 独立安装目录 (安全、不破坏系统、生产环境推荐) 全程包含:编译配置 → 安装 → 环境配置 → 验证 → 回滚,所有坑全部补齐

前置统一规则(所有方案必执行)

1. 安装依赖

复制代码
yum install -y gcc make zlib-devel pam-devel perl perl-IPC-Cmd

2. 全量备份(保命,1 分钟)

复制代码
systemctl stop sshd
# OpenSSL备份
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
# OpenSSH备份
mv /usr/bin/ssh /usr/bin/ssh.bak
mv /usr/sbin/sshd /usr/sbin/sshd.bak
cp -r /etc/ssh /etc/ssh.bak
# PAM备份(绝不自动覆盖,仅备份)
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak

3. 源码包(固定版本:OpenSSL 3.4.1 + OpenSSH 10.3p1)

复制代码
cd /root
wget https://www.openssl.org/source/openssl-3.4.1.tar.gz
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.3p1.tar.gz

第一部分:OpenSSL 两种安装方案

🔴 方案 1:覆盖系统目录(你习惯的教程方式)

适用场景:想和系统命令无缝兼容、直接替换旧版

编译 + 安装 + 配置

复制代码
tar -xf openssl-3.4.1.tar.gz
cd openssl-3.4.1

# 1. 编译配置(核心:--prefix=/usr 覆盖系统目录)
./config --prefix=/usr shared zlib

# 2. 编译安装
make -j$(nproc)
make install

# 3. 刷新系统库(必须执行,否则命令报错)
ldconfig

# 4. 验证(输出 OpenSSL 3.4.1 即成功)
openssl version
cd ..

🟢 方案 2:独立安装目录(安全不破坏系统)

适用场景:怕搞坏系统、不覆盖系统默认库

编译 + 安装 + 配置

复制代码
tar -xf openssl-3.4.1.tar.gz
cd openssl-3.4.1

# 1. 编译配置(独立目录:/usr/local/openssl)
./config --prefix=/usr/local/openssl shared zlib

# 2. 编译安装
make -j$(nproc)
make install

# 3. 配置系统识别新版(软链接 + 库文件)
echo "/usr/local/openssl/lib64" >> /etc/ld.so.conf.d/openssl.conf
ldconfig
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl/include/openssl /usr/include/openssl

# 4. 验证
openssl version
cd ..

第二部分:OpenSSH 两种安装方案

🔴 方案 1:覆盖系统目录(教程通用、替换系统 ssh/sshd)

适用场景:你想要的「直接重启生效、和原系统无缝使用」

核心:--prefix=/usr 覆盖系统命令,--sysconfdir=/etc/ssh 沿用系统配置

复制代码
tar -zxvf openssh-10.3p1.tar.gz
cd openssh-10.3p1

# 1. 编译配置(银河麒麟避坑版)
./configure \
--prefix=/usr \                # 【覆盖系统目录】
--sysconfdir=/etc/ssh \        # 配置文件放系统默认路径
--with-ssl-dir=/usr \          # 绑定OpenSSL(方案1填/usr,方案2填/usr/local/openssl)
--with-zlib \
--with-pam \                   # 开启密码登录(必加)
--without-gssapi               # 禁用GSSAPI(必加,防报错)

# 2. 编译安装(不会覆盖/etc/pam.d/sshd)
make -j$(nproc)
make install

# 3. 银河麒麟必做修复(之前所有报错根源)
mkdir -p /var/empty && chmod 700 /var/empty  # 权限分离目录
ssh-keygen -A                                 # 生成主机密钥
sed -i 's/^GSSAPI/#GSSAPI/' /etc/ssh/sshd_config  # 注释GSSAPI
sed -i 's/^NotifyHostKeys/#NotifyHostKeys/' /etc/ssh/sshd_config
# 正确配置SFTP(必须加)
echo "Subsystem sftp /usr/libexec/sftp-server" >> /etc/ssh/sshd_config

echo -e "PasswordAuthentication yes\nPermitRootLogin yes\nUsePAM yes" >> /etc/ssh/sshd_config

# 4. 检查配置 + 启动服务
sshd -t
systemctl daemon-reload
systemctl restart sshd
systemctl enable sshd

# 5. 验证
ssh -V
cd ..

🟢 方案 2:独立安装目录(安全、不覆盖系统 ssh)

适用场景:测试升级、不想破坏系统原版 OpenSSH

核心:安装到 /usr/local/openssh,不修改系统任何文件

复制代码
tar -zxvf openssh-10.3p1.tar.gz
cd openssh-10.3p1

# 1. 编译配置(独立目录)
./configure \
--prefix=/usr/local/openssh \    # 【独立安装目录】
--sysconfdir=/usr/local/openssh/etc \
--with-ssl-dir=/usr/local/openssl \  # OpenSSL方案2填这个,方案1填/usr
--with-zlib \
--with-pam \
--without-gssapi

# 2. 编译安装
make -j$(nproc)
make install

# 3. 修复目录 + 密钥
mkdir -p /var/empty && chmod 700 /var/empty
ssh-keygen -A

# 4. 配置systemd服务(独立版)
cat > /etc/systemd/system/openssh-new.service << 'EOF'
[Unit]
Description=OpenSSH 10.3 (Independent)
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/openssh/sbin/sshd -D -f /usr/local/openssh/etc/sshd_config

[Install]
WantedBy=multi-user.target
EOF

# 5. 启动独立服务
systemctl daemon-reload
systemctl start openssh-new
systemctl enable openssh-new

# 6. 验证(独立版本命令)
/usr/local/openssh/bin/ssh -V
cd ..

第三部分:两套方案 核心区别 + 选择建议

1. 覆盖系统目录

优点 缺点 风险
命令直接用(ssh/sshd 无需改路径) 覆盖系统旧版,出错难恢复 低(按我步骤无风险)
教程通用、直接重启生效 依赖系统环境
生产环境主流用法

✅ 你的选择:优先用这个!

2. 独立安装目录

优点 缺点 风险
完全不破坏系统 命令需用绝对路径 0 风险
可随时卸载 需单独配置服务

✅ 适用:测试、新手怕翻车


第四部分:

1. 覆盖系统目录时,make install 会覆盖哪些文件?

  • 覆盖/usr/bin/ssh/usr/sbin/sshd/usr/bin/openssl
  • 绝不覆盖/etc/pam.d/sshd(PAM 认证文件,安全底线)
  • 可选覆盖/etc/ssh/sshd_config(安装时选 N 不覆盖,我已帮你自动修复)

2. 覆盖系统目录后,直接重启可以吗?

可以! 按我方案 1(覆盖系统) 执行完,无任何报错 ,直接 reboot 重启,绝对不会登录失败(所有坑已修复)

3. 回滚方案(覆盖系统目录专用)

复制代码
systemctl stop sshd
# 恢复OpenSSL
mv /usr/bin/openssl.bak /usr/bin/openssl
mv /usr/include/openssl.bak /usr/include/openssl
# 恢复OpenSSH
mv /usr/bin/ssh.bak /usr/bin/ssh
mv /usr/sbin/sshd.bak /usr/sbin/sshd
rm -rf /etc/ssh && mv /etc/ssh.bak /etc/ssh
# 恢复PAM
cp /etc/pam.d/sshd.bak /etc/pam.d/sshd
# 重启服务
ldconfig
systemctl daemon-reload
systemctl restart sshd

最终极简总结(你后续升级直接照抄)

你日常升级(覆盖系统目录,一步到位)

  1. 备份 → 2. 编译 OpenSSL(--prefix=/usr)→ 3. 编译 OpenSSH(--prefix=/usr)→ 4. 修复 3 个坑(/var/empty、密钥、GSSAPI)→ 5. 检查 → 6. 直接重启

    重启命令(无报错直接执行)

    reboot

相关推荐
写代码的学渣5 小时前
Linux systemd 开机启动日志逐行详细解析报告
linux·运维·服务器
阿成学长_Cain6 小时前
Linux telinit 命令详解:运行级别切换|关机重启|系统维护一站式掌握
linux·运维·前端·网络
qeen877 小时前
【Linux】指令补充与shell的简单介绍
linux·运维·服务器
阿成学长_Cain8 小时前
Linux talk 命令详解:经典终端实时聊天工具,无需图形界面即可对话
linux·运维·前端
一拳一个娘娘腔9 小时前
【后渗透-Linux篇】Linux 提权与逃逸:从 www-data到 root的蜕变
linux·运维·服务器
jieyucx9 小时前
零基础通关:Shell 编程核心语法全景详解
linux·运维·编程·shell
杨运交9 小时前
[045][Crypto模块]设计一个可扩展的加解密框架:策略模式与工厂模式实战
linux·运维·策略模式
shx_wei9 小时前
从函数调用到进程替换:使用 execl、CMake 与 PowerShell 构建一个多可执行程序
linux·c语言·windows·c
Dlrb12119 小时前
信息查询Web服务器-->电子商城信息查询项目
linux·服务器·数据库·html·嵌入式·epoll·数据查询
纳兰青华9 小时前
在 PVE 上通过 LXC 部署 Ubuntu 24.04:为 OpenClaw 打造轻量高效的 AI 环境
linux·ai编程