Linux 制作 OpenSSH RPM 包


本文适用系统:Rocky Linux 9、AWS Amazon Linux 2023

1. 安装依赖
  • Rocky Linux:
dnf -y install epel-release gcc initscripts krb5-devel make openssl openssl-devel pam-devel perl rpm-build zlib-devel
dnf -y install imake
  • AWS Amazon Linux 2023(不支持 EPEL):
dnf -y install gcc initscripts krb5-devel make openssl openssl-devel pam-devel perl rpm-build zlib-devel
rpm -ivh https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/Packages/i/imake-1.0.8-6.el9.x86_64.rpm
2. 建立编译目录
mkdir -p ~/rpmbuild
cd ~/rpmbuild
mkdir -p BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
3. 下载源码包并解压
cd SOURCES
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz
tar xf openssh-9.6p1.tar.gz
wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz
4. 复制编译配置
cp openssh-9.6p1/contrib/redhat/openssh.spec ~/rpmbuild/SPECS/
5. 修改编译配置
cd ~/rpmbuild/SPECS
sed -i "s/%global no_gnome_askpass 0/%global no_gnome_askpass 1/g" openssh.spec
sed -i "s/%global no_x11_askpass 0/%global no_x11_askpass 1/g" openssh.spec
sed -i '/PreReq:/s/^/#/' openssh.spec
sed -i '/Obsoletes:/s/^/#/' openssh.spec
sed -i '/--without-openssl \\/,+1d' openssh.spec
sed -i '/%if %{without_openssl}/d' openssh.spec
6. 编译制作 RPM 包
rpmbuild -bb ~/rpmbuild/SPECS/openssh.spec
ls -l ~/rpmbuild/RPMS/x86_64/

debug 字符串的文件名后缀 .rpm 包非调试环境无需安装,只需安装另外3个包即可。

安装更新 OpenSSH RPM 包前先备份配置:

mv /etc/pam.d/sshd /etc/pam.d/sshd.bak

服务器安装完 RPM 包后续操作,否则重启服务 systemctl restart sshd 失败和报错:

cd ~/rpmbuild/RPMS/x86_64/
rpm -Uvh openssh-9.6p1-1.*.rpm openssh-clients-9.6p1-1.*.rpm openssh-server-9.6p1-1.*.rpm
sed -i '/ssh_host_rsa_key.pub/d' /etc/rc.d/init.d/sshd
sed -i '/ssh_host_dsa_key.pub/d' /etc/rc.d/init.d/sshd
mv /etc/pam.d/sshd.bak /etc/pam.d/sshd
echo 'UsePAM yes' >> /etc/ssh/sshd_config
chmod 0600 /etc/ssh/*
systemctl daemon-reload
systemctl restart sshd
### 创建和升级OpenSSH RPM的过程 #### 环境准备 在开始之前,需要确保有一个标准的Rocky Linux 8.6或更高版本的虚拟机环境,并具备外网访问权限。默认情况下,该系统的OpenSSH版本较低(例如8.0p1),因此需要手动构建新的RPM。 --- #### 编译环境搭建 为了成功编译OpenSSH源码并生成RPM,需安装必要的开发工具和库: ```bash dnf install -y wget make gcc perl rpm-build gtk2-devel krb5-devel \ libXt-devel openssl-devel pam-devel zlib-devel ``` 此外,还需要额外的基础工具支持,例如`imake`,可以通过以下方式获取并安装: ```bash wget http://www.rpmfind.net/linux/centos/8-stream/PowerTools/x86_64/os/Packages/imake-1.0.7-11.el8.x86_64.rpm dnf localinstall imake-1.0.7-11.el8.x86_64.rpm -y ``` 以上步骤用于设置完整的编译环境[^1]。 --- #### 下载OpenSSH源码 从官方网站或其他可信资源下载目标版本的OpenSSH源码压缩。例如,要升级到9.4p1版本,可以执行如下操作: ```bash cd /usr/src wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz tar zxvf openssh-9.4p1.tar.gz cd openssh-9.4p1 ``` --- #### 使用rpmbuild构建RPM 通过`rpmbuild`工具来创建自定义的OpenSSH RPM。以下是具体流程: 1. **初始化RPMBUILD目录结构** ```bash mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros ``` 2. **复制源码至SOURCES目录** 将解压后的OpenSSH源码移动到指定位置: ```bash cp ../openssh-9.4p1.tar.gz ~/rpmbuild/SOURCES/ ``` 3. **编写SPEC文件** 在`~/rpmbuild/SPECS/`下新建一个名为`openssh.spec`的文件,内容大致如下: ```spec Name: openssh Version: 9.4p1 Release: 1%{?dist} Summary: Secure Shell (SSH) client and server programs. License: BSD URL: https://www.openssh.com/ Source0: %{name}-%{version}.tar.gz BuildRequires: gcc make perl rpm-build gtk2-devel krb5-devel libXt-devel openssl-devel pam-devel zlib-devel %description OpenSSH is a free version of SSH. %prep %autosetup %build ./configure --sysconfdir=/etc/ssh --with-pam --with-md5-passwords --without-hardening make %install rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install %files %defattr(-,root,root,-) /usr/bin/* /usr/sbin/* /etc/ssh/* %changelog * Mon Oct 10 2023 YourName <your.email@example.com> - 9.4p1-1 - Initial build. ``` 4. **构建RPM** 运行以下命令完成RPM的构建过程: ```bash rpmbuild -ba ~/rpmbuild/SPECS/openssh.spec ``` 最终生成的RPM会位于`~/rpmbuild/RPMS/x86_64/`路径下[^5]。 --- #### 安装与验证新版本 1. **卸载旧版OpenSSH** 避免冲突,建议先移除现有版本: ```bash yum erase -y openssh openssh-clients openssh-server ``` 2. **安装新版RPM** 执行以下命令安装刚刚构建好的RPM: ```bash rpm -ivh ~/rpmbuild/RPMS/x86_64/openssh-*.rpm ``` 3. **调整权限** 新建密钥文件后,应适当降低其权限以满足安全需求: ```bash chmod 600 /etc/ssh/ssh_host* ``` 4. **重启服务** 更新完成后重新加载SSH服务: ```bash systemctl restart sshd ``` 5. **确认版本号** 检查当前运行的OpenSSH版本是否已更新: ```bash ssh -V ``` 如果遇到任何错误提示,可尝试使用调试模式定位问题: ```bash sshd -t ``` --- #### 可能的问题排查 - 若升级后无法正常连接服务器,通常是因为SELinux策略未同步更新或者防火墙规则被更改[^2]。 - 权限过高可能导致SSH服务拒绝启动;务必按照前述方法修正相关文件权限[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值