openssh8.2制作rpm包
1、由于安全扫描出ssh的漏洞,需要升级ssh 一台一台编译安装比较慢。所以把源码包做成rpm包方便安装使用
2、下载源码包
3、制作6系统使用的包,在六系统上制作,制作7系统使用的包。在7系统上面制作,下载相关依赖包
yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip -y
4.创建所需目录
mkdir -p /root/rpmbuild/{SOURCES,SPECS}
把所需的包拷贝到该目录下面
cp openssh-8.2p1.tar.gz x11-ssh-askpass-1.2.4.1.tar.gz /root/rpmbuild/SOURCES
tar xf openssh-8.2p1.tar.gz
cp /root/rpmbuild/SOURCES/openssh-8.2p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS
5.修改配置文件
sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" openssh.spec
sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" openssh.spec
构建包
rpmbuild -ba openssh.spec
编译过程遇到的错误:
错误:构建依赖失败: openssl-devel < 1.1 被 openssh-8.0p1-1.el7.x86_64 需要
解决:[root@localhost SPECS]# vim openssh.spec 注释掉 BuildRequires: openssl-devel < 1.1 这一行
构建包可能遇到如下问题:
检查未打包文件:/usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/openssh-8.2p1-1.el7.centos.x86_64错误:发现已安装(但未打包的)文件: /usr/libexec/openssh/ssh-sk-helper /usr/share/man/man8/ssh-sk-helper.8.gzRPM 构建错误: 发现已安装(但未打包的)文件: /usr/libexec/openssh/ssh-sk-helper /usr/share/man/man8/ssh-sk-helper.8.gz
问题说明:
大意是在SPEC最后make install时少COPY一些文件,我们可以手动在SPEC中把文件路径加上。
解决方案:
在spec文件中,找到%files(之下有很多%{_bindir}、%{_libdir}、%{_datadir}的),在其下依葫芦画瓢的添加上面提示的内容。
/usr/bin/xxx => %{_bindir}/xxx
/usr/lib/xxx => %{_libdir}/xxx
/usr/include/xxx => %{_includedir}/xxx
/usr/share/xxx => %{_datadir}/xxx
/usr/man/xxx => %{_mandir}/xxx
重新执行结果:
在/root/rpmbuild/RPMS/x86_64目录下可以看到转化后的RPM包
对rpm安装包进行测试
把生成的rpm包上传至测试服务器,解压
yum install -y ./openssh-*
特别注意:
升级完成后,需要检查sshd服务的状态,发现sshd状态异常,重启报错;
解决办法:
1)把/etc/ssh/目录下的ssh_host相关的算法文件全部删除
#rm -rf ssh_host_*
2)#systemctl daemon-reload
3)#systemctl restart sshd
重启完成后,利用别的服务器远程连接此服务器,报host_key认证有问题:
检查升级完成后的服务器的/etc/pam.d/sshd文件发现比原来少了很多参数
升级前的/etc/pam.d/sshd文件
把升级前的文件内容,拷到升级后的对应的文件中,修改sshd服务的配置
PermitRootLogin yes 允许root登陆
PasswordAuthentication yes 允许使用密码登陆
#systemctl restart sshd
重启sshd服务问题得到解决