openssh 10.4p1 在 openEuler 系统上构建 RPM 包

OpenSSH 10.4p1 - openEuler RPM 打包项目

RPM包下载地址:

或是以下地址:

概述

本项目基于 openEuler 系统环境,对 OpenSSH 10.4p1 源码进行 RPM 打包构建。支持 openEuler 22.03 LTS 和 24.03 LTS。

项目结构

openssh/
├── openssh-10.4p1.tar.gz          # OpenSSH 10.4p1 源码包
├── openssh-10.4p1.spec            # RPM 规范文件
├── build.sh                       # 自动构建脚本
├── sshd.pam                       # PAM 配置
├── sshd.service                   # Systemd 服务单元
├── sshd.sysconfig                 # 服务环境变量配置
├── sshd_config                    # 自定义 SSH 服务端配置
└── README.md                      # 本文档

构建产物

构建完成后生成以下 RPM 子包:

RPM 包名 说明 包含内容
openssh 核心包 ssh-keygen, ssh-keysign, moduli
openssh-clients 客户端包 ssh, scp, sftp, ssh-agent, ssh-add, ssh-keyscan, ssh-copy-id, ssh-pkcs11-helper, ssh-sk-helper
openssh-server 服务端包 sshd, sshd-auth, sshd-session, sftp-server, Systemd 服务, PAM 配置
openssh-askpass 图形密码对话框 gnome-ssh-askpass, profile.d 脚本
openssh-help 文档和 man 手册 所有 man 手册页和文档

环境要求

支持的操作系统

系统 版本 架构
openEuler 22.03 LTS x86_64, aarch64
openEuler 24.03 LTS x86_64, aarch64
openEuler 24.09 x86_64, aarch64

完整依赖清单

构建依赖 (BuildRequires)

包名 版本要求 用途
autoconf - 重新生成 configure 脚本
automake - 自动生成 Makefile
gcc - C 编译器
make - 构建工具
dos2unix - 转换换行符
groff - 格式化 man 手册
util-linux - 基础工具集
perl-interpreter - Perl 解释器(构建脚本辅助)
perl-generators - Perl 依赖生成器
perl-podlators - POD 格式转换
zlib-devel - 压缩库
openssl-devel >= 1.1.1 SSL/TLS 加密库
pam-devel - PAM 认证框架
libselinux-devel >= 2.3-5 SELinux 安全策略
audit-libs-devel >= 2.0.5 Linux 审计系统
krb5-devel - Kerberos 5 认证
systemd-devel - Systemd 服务集成
p11-kit-devel - PKCS#11 智能卡支持
openldap-devel - LDAP 支持
gtk2-devel - GTK2 图形库(askpass)
libX11-devel - X11 图形库(askpass)
libedit-devel - 行编辑和历史记录(sftp)
ncurses-devel - 终端控制库
xauth - X11 认证工具
gnupg2 - GPG 签名验证
crypto-policies - 加密策略

运行时依赖 (Requires)

包名 版本要求 归属子包
/sbin/nologin - openssh
libselinux >= 2.3-5 openssh
audit-libs >= 1.0.8 openssh
openssh-server = %{version}-%{release} openssh
crypto-policies >= 20180306-1 clients, server
pam >= 1.0.1-3 server
shadow - server (pre)
systemd - server

推荐安装 (Recommends)

包名 用途
p11-kit PKCS#11 智能卡中间件

快速构建

方法一:使用构建脚本(推荐)

# 以 root 身份运行
sudo bash build.sh

脚本会自动完成:

  1. 安装所有构建依赖
  2. 设置 RPM 构建环境
  3. 生成 SRPM 源码包
  4. 构建二进制 RPM 包
  5. 输出构建结果

方法二:手动构建

# 1. 安装构建依赖
sudo dnf install -y rpm-build autoconf automake make gcc gcc-c++ \
    dos2unix groff util-linux perl-interpreter perl-generators \
    perl-podlators zlib-devel openssl-devel pam-devel \
    libselinux-devel audit-libs-devel krb5-devel systemd-devel \
    p11-kit-devel openldap-devel gtk2-devel libX11-devel \
    libedit-devel ncurses-devel xauth gnupg2

# 2. 设置 RPM 构建目录
mkdir -p ~/rpmbuild/{SOURCES,SPECS,SRPMS,RPMS,BUILD,BUILDROOT}

# 3. 拷贝源码和辅助文件
cp openssh-10.4p1.tar.gz ~/rpmbuild/SOURCES/
cp sshd.pam sshd.sysconfig sshd.service sshd_config ~/rpmbuild/SOURCES/
cp openssh-10.4p1.spec ~/rpmbuild/SPECS/

# 4. 构建
rpmbuild -ba ~/rpmbuild/SPECS/openssh-10.4p1.spec

安装

# 安装所有包
sudo rpm -Uvh ~/rpmbuild/RPMS/*/openssh-*.rpm

# 或使用 dnf
sudo dnf localinstall ~/rpmbuild/RPMS/*/openssh-*.rpm

配置说明

服务端配置

  • 主配置文件: /etc/ssh/sshd_config
  • 扩展配置目录: /etc/ssh/sshd_config.d/
  • PAM 配置: /etc/pam.d/sshd
  • 服务环境变量: /etc/sysconfig/sshd

客户端配置

  • 全局配置: /etc/ssh/ssh_config
  • 扩展配置目录: /etc/ssh/ssh_config.d/

服务管理

# 启动服务
sudo systemctl start sshd

# 设置开机自启
sudo systemctl enable sshd

# 查看状态
sudo systemctl status sshd

# 重启服务(重新加载配置)
sudo systemctl restart sshd

已启用的功能特性

特性 说明
:white_check_mark: PAM 认证 可插拔认证模块支持
:white_check_mark: SELinux 支持 安全增强型 Linux 策略
:white_check_mark: Kerberos 5 企业级 Kerberos 认证
:white_check_mark: Linux Audit 系统审计日志
:white_check_mark: PKCS#11 智能卡/U2F 硬件密钥
:white_check_mark: Systemd 现代服务管理
:white_check_mark: X11 转发 图形界面转发
:white_check_mark: ssh-copy-id 便捷密钥分发
:white_check_mark: seccomp_filter 沙箱隔离(x86_64/aarch64)
:white_check_mark: PIE 安全加固 地址空间布局随机化
:white_check_mark: RELRO/BIND_NOW 只读重定位保护
:white_check_mark: libedit sftp 行编辑历史

注意事项

  1. FIDO/U2F 测试: 构建过程中禁用了测试套件,因为 FIDO 密钥模拟器在容器/虚拟机环境中可能存在问题。
  2. seccomp 沙箱: 在 riscv64、loongarch64、sw_64 架构上自动禁用 seccomp_filter 沙箱(这些架构内核支持不完整)。
  3. 签名文件: 不再需要 Source1 签名文件(.asc),构建过程已移除相关检查。
  4. 自检测试: 如需运行测试,在 spec 中取消注释 %%check 部分,然后执行 make tests

版本历史

版本 日期 说明
10.4p1-1 2026-07-20 首次适配 openEuler 的 OpenSSH 10.4p1 打包
10.3p1-1 2026-06-01 基于 openEuler 的 OpenSSH 10.3p1 打包

Spec 文件审查报告

本节记录对 openssh-10.4p1.spec 的全面审查结果,包括功能验证与问题修复。

功能验证

功能 审查结论 验证依据
X11 转发 :white_check_mark: 完整支持 BuildRequires: libX11-devel gtk2-devel xauth + --with-xauth=/usr/bin/xauth + sshd_config 默认启用 X11Forwarding + gnome-ssh-askpass 构建与安装
ssh-copy-id :white_check_mark: 完整支持 contrib/ssh-copy-id 安装到 %{_bindir} + 手册页安装到 man1 + %files clients 中声明
PAM 认证 :white_check_mark: 已启用 --with-pam + 自定义 /etc/pam.d/sshd 配置
SELinux :white_check_mark: 已启用 --with-selinux + libselinux-devel 构建依赖
Kerberos 5 :white_check_mark: 已启用 --with-kerberos5 + krb5-devel 构建依赖
Linux Audit :white_check_mark: 已启用 --with-audit=linux + audit-libs-devel 构建依赖
PKCS#11 :white_check_mark: 自动检测 p11-kit-devel 构建依赖,configure 自动启用
Systemd :white_check_mark: 完整集成 %systemd_post / %systemd_preun / %systemd_postun_with_restart + sshd.service 单元
seccomp 沙箱 :white_check_mark: 条件启用 --with-sandbox=seccomp_filter(x86_64/aarch64),riscv64/loongarch64/sw_64 自动禁用
PIE 安全加固 :white_check_mark: 已启用 LDFLAGS="$LDFLAGS -pie -z relro -z now"
libedit :white_check_mark: 已启用 libedit-devel 构建依赖,configure 自动检测
askpass 图形对话框 :white_check_mark: 完整支持 GTK2 版 gnome-ssh-askpass 构建 + ssh-askpass 符号链接 + profile.d 脚本

审查发现的问题与修复

# 问题描述 严重程度 修复方式
1 BuildRequires 中误用运行时库 audit-libs >= 1.0.8(非 devel 包,且第31行已有 audit-libs-devel >= 2.0.5 :warning: 已删除该冗余条目
2 %install 中创建了 ssh_config.d 目录,但 %files clients 中未声明,rpmbuild 时会报 unpackaged files 错误 :cross_mark: 已在 %files clients 中添加 %dir %attr(0755,root,root) %{_sysconfdir}/ssh/ssh_config.d
3 缺少 --with-xauth 配置选项,可能导致 xauth 路径检测失败,影响 X11 转发 :warning: 已添加 --with-xauth=/usr/bin/xauth
4 openEuler 2403 构建失败:brp-digest-list 脚本因 SELinux 路径检查失败报 Path is outside buildroot :cross_mark: 添加 BuildRequires: systemd-rpm-macros + %undefine __brp_digest_list

语法结构验证

检查项 结果
%if / %endif 平衡(2个条件块) :white_check_mark: 全部闭合
%package%files 对应(5个子包) :white_check_mark: 全部匹配
Source 声明与 %install 引用对应(4个 Source) :white_check_mark: 全部引用
构建脚本 build.sh shell 语法检查 :white_check_mark: 通过 (bash -n)