1,查看环境信息
#uname -a 4.19.90-17.5.ky10.aarch64 #1 SMP Fri Aug 7 13:35:33 CST 2020 aarch64 aarch64 aarch64 GNU/Linux #dnf version 4.2.15 Installed: dnf-0:4.2.15-7.ky10.noarch at Tue 22 Mar 2022 03:13:28 AM GMT Built : Koji at Wed 15 Apr 2020 04:00:09 AM GMT Installed: rpm-0:4.15.1-12.ky10.aarch64 at Tue 22 Mar 2022 03:12:10 AM GMT Built : Koji at Sat 14 Mar 2020 03:29:50 AM GMT
可以看出属于类centos系统,制作redhat的rpm安装包即可
2,制作openssh高版本压缩包
#安装编译环境 dnf install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel libXt-devel gtk2-devel make perl krb5-devel imake -y #下载源码 wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.1p1.tar.gz wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz #创建源码目录 mkdir -pv /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} #查看源码目录 ls -lh /root/rpmbuild/ total 24K drwx------ 3 root root 4.0K Sep 26 10:55 BUILD drwx------ 2 root root 4.0K Sep 26 10:56 BUILDROOT drwx------ 3 root root 4.0K Sep 26 10:56 RPMS drwx------ 2 root root 4.0K Sep 25 11:02 SOURCES drwx------ 2 root root 4.0K Sep 26 10:55 SPECS drwx------ 2 root root 4.0K Sep 25 10:25 SRPMS ~/rpmbuild/BUILD 构建目录,存放源代码解压以后的文件,并在该目录的子目录完成编译 ~/rpmbuild/BUILDROOT 最终安装目录,保存 %install 阶段安装的文件 ~/rpmbuild/RPMS 标准 RPM 包目录,保存二进制 RPM 包,此目录下会有子目录 ~/rpmbuild/SOURCES 源代码目录,保存源码包、配置文件和补丁包等 ~/rpmbuild/SPECS spec 文件目录,保存spec文件,每个rpm包的制作,都必须要有一个spec文件,用来指导文件。此文件以软件包的名字命名,以spec为扩展名 ~/rpmbuild/SRPMS src.rpm包目录,保存源码 RPM 包(SRPM)。 #拷贝源码包到相应目录 cp openssh-9.1p1.tar.gz x11-ssh-askpass-1.2.4.1.tar.gz /root/rpmbuild/SOURCES #解压源码包,提取构建spec文件,拷贝openssh.spec文件到SEPCS tar -zxf openssh-9.1p1.tar.gz cp openssh-9.1p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS/ #根据官网默认openssh.spec制作的rpm安装包,在升级时会卸载旧版本openssh并复制源码包中的 ./openssh-9.1p1/contrib/redhat/sshd.pam 以替换/etc/pam.d/sshd,将导致升级后无法登录进系统。故需要手动更改替换文件,替换为想要的内容; 建议直接使用系统自带的/etc/pam.d/sshd原生文件。 #将/etc/pam.d/sshd复制到SOURCES目录 cp /etc/pam.d/sshd /root/rpmbuild/SOURCES #修改并优化openssh.spec文件 第104行:注释该行,检测openssl版本的,否则构建时会出现报错 BuildRequires: openssl-devel < 1.1 第 89 行: 添加一个源 Source2: sshd 第280行:更改为从SOURCE目录复制sshd到/etc/pam.d/sshd,注释掉原命令,改为下面行 #install -m644 contrib/redhat/sshd.pam $RPM_BUILD_ROOT/etc/pam.d/sshd install -m644 $RPM_SOURCE_DIR/sshd $RPM_BUILD_ROOT/etc/pam.d/sshd 第283行:更改为从contrib目录复制ssh-copy-id到/usr/bin/ssh-copy-id,增加下面这行 install -m755 contrib/ssh-copy-id $RPM_BUILD_ROOT/usr/bin/ssh-copy-id 第 340-341行 这两行需要放在 %pre server 下,为安装前备份内容 cp -r /etc/ssh /etc/ssh_bak 第 345 -369行: 需要放在 %post server后面,表示安装后需要执行的命令 1.允许root登录;升级为9.1后默认为不允许root登录 2.允许使用PAM登录认证 ; 3.允许使用X11Forwarding图形模块; 4.删除默认的认证支持,里面存在高位漏洞 5.增加认证支持(默认openssh 9.1,默认不支持部分低版本的认证模式),不添加会造成低版本的连接器如:CRT等,客户端连接失败 6.生成sshd的systemctl启动配置文件,默认会删除原有的启动配置,导致重启一直报warning 7.三个文件 ssh_host_rsa_key、ssh_host_ecdsa_key、ssh_host_ed25519_key 为必要文件,9.0版本缩小了权限,只允许root查看,否者启动sshd服务会报错 sed -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 sed -i -e "s/^KexAlgorithms.*//g" /etc/ssh/sshd_config echo "KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1" >>/etc/ssh/sshd_config cat <<'EOF' > /usr/lib/systemd/system/sshd.service [UNIT] Description=OpenSSH server daemon After=network.target sshd-keygen.target Wants=sshd-keygen.target [Service] Type=forking ExecStart=/etc/rc.d/init.d/sshd start ExecReload=/etc/rc.d/init.d/sshd restart ExecStop=/etc/rc.d/init.d/sshd stop PrivateTmp=True [Install] WantedBy=multi-user.target EOF chmod 600 /etc/ssh/ssh_host_rsa_key chmod 600 /etc/ssh/ssh_host_ecdsa_key chmod 600 /etc/ssh/ssh_host_ed25519_key 第 397行: 放在%attr(0755,root,root) %{_bindir}/sftp后面,表示安装修改ssh-copy-id的属性 增加以下行: %attr(0755,root,root) %{_bindir}/ssh-copy-id #构建rpm包,构建完成后显示+ exit 0 ,表示构建成功 cd /root/rpmbuild/SPECS/ && rpmbuild -ba openssh.spec ..... #构建完成会生成新的rpm包 ls -lh /root/rpmbuild/RPMS/aarch64/ total 5.0M -rw------- 1 root root 620K Sep 26 10:56 openssh-9.1p1-1.ky10.ky10.aarch64.rpm -rw------- 1 root root 31K Sep 26 10:56 openssh-askpass-9.1p1-1.ky10.ky10.aarch64.rpm -rw------- 1 root root 14K Sep 26 10:56 openssh-askpass-gnome-9.1p1-1.ky10.ky10.aarch64.rpm -rw------- 1 root root 591K Sep 26 10:56 openssh-clients-9.1p1-1.ky10.ky10.aarch64.rpm -rw------- 1 root root 2.7M Sep 26 10:56 openssh-debuginfo-9.1p1-1.ky10.ky10.aarch64.rpm -rw------- 1 root root 691K Sep 26 10:56 openssh-debugsource-9.1p1-1.ky10.ky10.aarch64.rpm -rw------- 1 root root 422K Sep 26 10:56 openssh-server-9.1p1-1.ky10.ky10.aarch64.rpm #安装升级 dnf localinstall openssh-9.1p1-1.ky10.ky10.aarch64.rpm openssh-clients-9.1p1-1.ky10.ky10.aarch64.rpm openssh-server-9.1p1-1.ky10.ky10.aarch64.rpm #更新验证 #验证客户端 ssh -V OpenSSH_9.1p1, OpenSSL 1.1.1d 10 Sep 2019 #验证服务端 ssh -v 127.0.0.1 ''' debug1: Local version string SSH-2.0-OpenSSH_9.1 debug1: Remote protocol version 2.0, remote software version OpenSSH_9.1 debug1: compat_banner: match: OpenSSH_9.1 pat OpenSSH* compat 0x04000000 debug1: Authenticating to 127.0.0.1:22 as 'root' '''
参考文档:https://blog.csdn.net/QTM_Gitee/article/details/125101607