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

相关推荐
AlfredZhao14 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户97183563346620 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
开发者联盟league2 天前
安装pnpm
ssh
载数而行5202 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩2 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈2 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
凡人叶枫2 天前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++