Kylin V10 SP1 arm架构制作高版本openssh的rpm安装包

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

此条目发表在linux分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注