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

相关推荐
hweiyu0012 小时前
Linux命令:iotop
linux·运维
齐潇宇13 小时前
Jenkins 自动化部署 Tomcat + PHP
linux·运维·容器·tomcat·jenkins
枳实-叶13 小时前
【Linux驱动开发】第17天:I2C子系统整体架构
linux·驱动开发·架构
Cat_Rocky13 小时前
Linux-基于Jenkins自动打包并部署Tomcat环境
linux·tomcat·jenkins
hj28625113 小时前
Linux 进程、作业控制、定时任务 完整版整理笔记
linux·运维·笔记
时间静止不是简史13 小时前
CentOS 7 虚拟机 NAT 网络排障:DHCP 服务为何启动即停
linux·网络·centos
剑神一笑13 小时前
Linux wget 命令详解:从基础到高级下载技巧
linux·运维·服务器
AOwhisky13 小时前
Ceph系列第二期:Ceph集群部署实战(cephadm)
linux·运维·笔记·分布式·ceph·云计算·存储
郝亚军14 小时前
RK3562 nfs mount
linux·运维·服务器