OpenSSH rpm包构建与升级
环境
- 硬件平台: PVE-KVM x86_64
- 系统版本: CentOS 7.9 64bit
- 当前软件版本: OpenSSH-7.4p1 OpenSSL-1.02K
- 目标软件版本: OpenSSH-9.7p1 OpenSSL-1.1.1W
说明
OpenSSH-9.7p1
依赖OpenSSL-1.1.1
及以上版本, 请先升级OpenSSL, 参照这里OpenSSH-8.6
后默认为不允许root登录- 较新版本的CentOS7中
pam_stack.so
模块已经被弃用删除, 请备份/etc/pam.d/sshd
- 默认允许使用PAM登录认证;
- 默认允许使用X11Forwarding图形模块;
- 需修改
ssh_host_rsa_key
、ssh_host_ecdsa_key
、ssh_host_ed25519_key
这三个文件的权限,OpenSSH-8.6
之后缩小了这三个文件的权限为0600, 大于该权限将会导致SSHD
启动失败
一、 OpenSSH rpm包构建
1.1 安装依赖
~]# yum install libXt libXt-devel imake gtk2-devel
~]# yum install rpm-build rpmlint rpmdevtools curl
1.2 rpmbuild 目录相关
注意:
下面两个操作请不要使用 root
用户操作
创建目录
~]$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
目录配置
~]$ echo "%_topdir %{getenv:HOME}/rpmbuild" > ~/.rpmmacros
%_topdir
:RPM 构建的顶层目录宏%{getenv:HOME}
:获取用户主目录的环境变量~/.rpmmacros
:用户 RPM 配置文件
1.3 下载源码
下载 OpenSSH-9.7p1和x11-ssh-askpass-1.2.4.1源码到
~/rpmbuild/SOURCES
目录curl -o ~/rpmbuild/SOURCES/openssh-9.7p1.tar.gz https://mirrors.aliyun.com/pub/OpenBSD/ OpenSSH/portable/openssh-9.7p1.tar.gz
curl -o ~/rpmbuild/SOURCES/x11-ssh-askpass-1.2.4.1.tar.gz https://src.fedoraproject.org/repo /pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/ x11-ssh-askpass-1.2.4.1.tar.gz
1.4 配置 .SPEC
文件
从源码提取.SPEC 文件到SPEC目录
tar -xf ~/rpmbuild/SOURCES/openssh-9.7p1.tar.gz -C ~/rpmbuild/SPECS openssh-9.7p1/contrib/redhat/openssh.spec --strip-components=3
修改
.SPEC
文件%pre server
区域新增如下配置, 备份ssh配置cp -Rf /etc/ssh{,.back}
修改
.SPEC
文件%post server
区域下面新增如下配置, 配置sshdsed -i -e "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config
sed -i -e "s/#UsePAM no/UsePAM yes/g" /etc/ssh/sshd_config
sed -i -e "s/#X11Forwarding no/X11Forwarding yes/g" /etc/ssh/sshd_config
chmod +x /etc/init.d/sshd
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key修改
.SPEC
文件%install
保留原pam
配置注释这行
install -m644 contrib/redhat/sshd.pam $RPM_BUILD_ROOT/etc/pam.d/sshd
增加此行
install -m644 /etc/pam.d/sshd $RPM_BUILD_ROOT/etc/pam.d/sshd修改
%configure
选项,without_openssl
选项关闭, 并添加openssl-1.1.1w的路径
.... # 前面代码省略
--with-ssl-dir=/usr/openssl \ # 根据 rpm 安装 openssl 的路径决定的
# %if ! %{without_openssl}
# --without-openssl \
# %endif
.... # 后面代码省略
1.5 检查 .SPEC
文件
如果没有 error就可以下一步构建了
[dev@pve-centos7 SPECS]$ rpmlint ./openssh.spec |
1.6 构建 OpenSSH rpm包
~] $ rpmbuild -ba ~/rpmbuild/SPECS/openssh.spec
如下结果一般就没什么问题了
二、 更新 OpenSSH-9.7p1
2.1 输出rpm包详情
[dev@pve-centos7 rpmbuild]$ tree -L 3 RPMS/ |
2.2 rpm -Uvh 更新 OpenSSH
注意:
更新的前提是, openssl 已经升级至 openssl-1.1.1w
版本
- 升级
openssh
的时候, 涉及openssl
相关的组件:- 只需要升级
openssl-1.1.1w
openssl-devel
可以不升级openssl-libs
切记不能升级
- 只需要升级
# 注意 openssl 的版本 |
2.3 重启 OpenSSH
注意:
操作不当会导致sshd服务无法启动, 请确保你有其他登录服务器的方式
systemctl daemon-reload
systemctl restart sshd
三、 常见问题
3.1 ssh升级成功但是登录失败
报错: PAM unable to dlopen(/usr/lib64/security/pam_stack.so): /usr/lib64/security/pam_stack.so: cannot open shared object file
原因: pam_stack.so 在较新版本的CentOS中已经弃用并删除
解决: 不升级 /etc/pam.d/sshd 文件, 或者使用旧版本的文件替换
3.2 yum update 报错
- openssl更新到了 openssl-1.1.1w, 但是对应的openssl-devel和openssl-libs没有更新, 版本的原因, 也不推荐更新这两个
- 解决:
/etc/yum.conf
添加exclude=openssl
四、 附件
- 该附件已修复
pam_stack.so
导致登录失败的问题
openssh-9.7p1.spec