CentOS7 1804 OpenSSH8.3p1打包RPM、安装升级

    技术2022-07-10  144

    CentOS7 1804 OpenSSH8.3p1打包RPM、安装/升级

    一、下载源码包二、安装rpm-build、编译环境三、提取spec文件四、修改spec文件五、生成rpm六、安装附一:降级附二:使用TELNET登录进行安装附三:其他参考附四:下载链接

    一、下载源码包

    下文统一操作从home目录开始进行操作

    cd ~

    从openssh.com下载openssh源码包

    wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.3p1.tar.gz

    下载x11-ssh-askpass x11口令对话框插件源码包,可选,如无需x11-ssh-askpass可通过修改spec文件跳过该源码包,原始下载路径 http://www.jmknoble.net/software/x11-ssh-askpass/无法访问。

    wget 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

    验证文件签名,可选

    #从openbsd下载签名公钥 wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/RELEASE_KEY.asc

    #导入公钥

    [user1@localhost ~]$ gpg --import RELEASE_KEY.asc gpg: 已创建目录‘/home/user1/.gnupg’ gpg: 新的配置文件‘/home/user1/.gnupg/gpg.conf’已建立 gpg: 警告:在‘/home/user1/.gnupg/gpg.conf’里的选项于此次运行期间未被使用 gpg: 钥匙环‘/home/user1/.gnupg/secring.gpg’已建立 gpg: 钥匙环‘/home/user1/.gnupg/pubring.gpg’已建立 gpg: /home/user1/.gnupg/trustdb.gpg:建立了信任度数据库 gpg: 密钥 86FF9C48:公钥“Damien Miller (Personal Key) <djm@mindrot.org>”已导入 gpg: 密钥 11B5748F:公钥“Damien Miller <dmiller@vitnet.com.sg>”已导入 gpg: 密钥 691EF8DA:公钥“Damien Miller (Personal Key) <djm@mindrot.org>”已导入 gpg: 密钥 6D920D30:公钥“Damien Miller <djm@mindrot.org>”已导入 gpg: 合计被处理的数量:4 gpg: 已导入:4 (RSA: 1) gpg: 没有找到任何绝对信任的密钥

    #下载源码包签名

    wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.3p1.tar.gz.asc

    #检验签名

    [user1@localhost ~]$ gpg --verify openssh-8.3p1.tar.gz.asc openssh-8.3p1.tar.gz gpg: 于 2020年05月27日 星期三 11时06分28秒 CST 创建的签名,使用 RSA,钥匙号 6D920D30 gpg: 完好的签名,来自于“Damien Miller <djm@mindrot.org>” gpg: 警告:这把密钥未经受信任的签名认证! gpg: 没有证据表明这个签名属于它所声称的持有者。 主钥指纹: 59C2 118E D206 D927 E667 EBE3 D3E5 F56B 6D92 0D30 有“完好的签名”提示既文件与asc签名一致未被修改,密钥认证暂忽略。

    二、安装rpm-build、编译环境

    安装rpm-buiild包及其他编译需要的包

    yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip

    添加askpass支持需要增加安装依赖包libXt-devel imake gtk2-devel

    yum install libXt-devel imake gtk2-devel

    创建rpm-build工作目录,SOURCES放置源码包,SPECS放置配置文件

    mkdir -p ~/rpmbuild/{SOURCES,SPECS}

    补充说明,rpmbuild下目录

    BUILD 编译rpm包的临时目录 BUILDROOT 编译后生成的软件临时安装目录 RPMS 最终生成的可安装rpm包的所在目录 SOURCES 所有源代码和补丁文件的存放目录 SPECS 存放SPEC文件的目录(重要) SRPMS 软件最终的rpm源码格式存放路径

    将源码包拷贝至rpmbuild工作目录

    cp ~/openssh-8.3p1.tar.gz ~/rpmbuild/SOURCES #如添加askpass支持 cp ~/x11-ssh-askpass-1.2.4.1.tar.gz ~/rpmbuild/SOURCES

    三、提取spec文件

    从源码包提取spec文件

    tar -zxvf openssh-8.3p1.tar.gz openssh-8.3p1/contrib/redhat/openssh.spec cp ~/openssh-8.3p1/contrib/redhat/openssh.spec ~/rpmbuild/SPECS

    四、修改spec文件

    如无需askpass可通过修改spec文件参数跳过对x11-ssh-askpass源码包

    # Do we want to disable building of x11-askpass? (1=yes 0=no) %global no_x11_askpass 1 # Do we want to disable building of gnome-askpass? (1=yes 0=no) %global no_gnome_askpass 1 #注释掉Source1 x11-ssh-askpass包引用 #Source1: http://www.jmknoble.net/software/x11-ssh-askpass/x11-ssh-askpass-%{aversion}.tar.gz

    解决openssl-devel < 1.1报错

    #注释掉BuildRequires: openssl-devel < 1.1 #BuildRequires: openssl-devel < 1.1

    编译无法通过,出现以下提示

    错误:发现已安装(但未打包的)文件: /usr/libexec/openssh/ssh-sk-helper /usr/share/man/man8/ssh-sk-helper.8.gz

    RPM 构建错误: 发现已安装(但未打包的)文件: /usr/libexec/openssh/ssh-sk-helper /usr/share/man/man8/ssh-sk-helper.8.gz 验证发现自带spec文件为2018年最后更新,ssh-sk-helper为2019年12月新增,spec文件未%file中未包含该文件 修改spec文件 在%attr(0644,root,root) %{_mandir}/man8/ssh-pkcs11-helper.8*后追加

    %attr(0755,root,root) %{_libexecdir}/openssh/ssh-sk-helper %attr(0644,root,root) %{_mandir}/man8/ssh-sk-helper.8*

    五、生成rpm

    cd ~/rpmbuild/SPECS rpmbuild -ba openssh.spec

    超多输出,只要最后是“+ exit 0”就是成功生成

    生成后的文件存放在~/rpmbuild/RPMS 因为是在x86_64做的编译所以在 ~/rpmbuild/RPMS/x86_64 目录中 /home/user1/rpmbuild/RPMS/x86_64

    [user1@localhost x86_64]$ ll 总用量 4536 -rw-rw-r--. 1 user1 user1 602772 6月 25 15:10 openssh-8.3p1-1.el7.centos.x86_64.rpm -rw-rw-r--. 1 user1 user1 44312 6月 25 15:10 openssh-askpass-8.3p1-1.el7.centos.x86_64.rpm -rw-rw-r--. 1 user1 user1 24696 6月 25 15:10 openssh-askpass-gnome-8.3p1-1.el7.centos.x86_64.rpm -rw-rw-r--. 1 user1 user1 580532 6月 25 15:10 openssh-clients-8.3p1-1.el7.centos.x86_64.rpm -rw-rw-r--. 1 user1 user1 2958016 6月 25 15:10 openssh-debuginfo-8.3p1-1.el7.centos.x86_64.rpm -rw-rw-r--. 1 user1 user1 419928 6月 25 15:10 openssh-server-8.3p1-1.el7.centos.x86_64.rpm [user1@localhost x86_64]$

    六、安装

    备份配置

    mkdir ~/ssh_bak cp /etc/pam.d/sshd ~/ssh_bak/ cp /etc/ssh/ssh_config ~/ssh_bak/ cp /etc/ssh/sshd_config ~/ssh_bak/ cp /usr/lib/systemd/system/sshd* ~/ssh_bak

    卸载安装

    如果openssh未被依赖可以直接将openssh卸载后安装

    yum erase openssh yum -y localinstall openssh-8.3p1-1.el7.centos.x86_64.rpm openssh-server-8.3p1-1.el7.centos.rpm openssh-clients-8.3p1-1.el7.centos.rpm

    升级方式安装

    #升级,如依赖程序有版本要求则需要同步升级,在SSH进程操作切记在验证登录成功前不要退出当前会话 yum -y localupdate openssh-8.3p1-1.el7.centos.x86_64.rpm openssh-server-8.3p1-1.el7.centos.x86_64.rpm openssh-clients-8.3p1-1.el7.centos.x86_64.rpm

    恢复备份

    #恢复PAM设置 /bin/cp -f ~/ssh_bak/sshd /etc/pam.d/

    自打包未包含systemd管理服务的service文件,需要自行添加,因centos自带rpm包中包含原始包中不存在的sshd-keygen可能会出现未找到文件错误,请谨慎执行,如不使用service文件管理可以使用chkconfig管理sshd的开机启动。

    #恢复启动文件,自行打包文件未包含.service,需使用旧版本的文件 /bin/cp -f ~/ssh_bak/sshd*.service /usr/lib/systemd/system/ /bin/cp -f ~/ssh_bak/sshd*.socket /usr/lib/systemd/system/

    修改key文件访问权限

    #修改/etc/ssh/ssh_host_* 权限 chmod 400 /etc/ssh/ssh_host_*

    修改sshd_config

    (sshd_config可能会被创建为sshd_config.rpmnew,cp sshd_config.rpmnew sshd_config后再修改,如果有其他配置请同步。)

    #允许root登录,permitrootlogin yes PermitRootLogin yes #使用PAM UsePAM yes

    SecureCRT7.1密钥交换算法不在OpenSSH8.3默认列表中,XShell6无此问题 需要在配置文件中增加SecureCRT7.1支持的算法。

    sshd -T | grep kexalgorithms>> /etc/ssh/sshd_config vi /etc/ssh/sshd_config #在KexAlgorithms添加 diffie-hellman-group14-sha1

    启动sshd

    #systemd方式 systemctl enable sshd systemctl start sshd #chkconfig方式 chkconfig sshd on service sshd start

    验证登录 略 安装完成后建议进行一两次服务启停保障服务工作正常。

    附一:降级

    yum -y downgrade openssh-server-7.4p1-21.el7 openssh-clients-7.4p1-21.el7 openssh-7.4p1-21.el7 /bin/cp -f ~/ssh_bak/sshd /etc/pam.d/ /bin/cp -f ~/ssh_bak/ssh_config /etc/ssh/ /bin/cp -f ~/ssh_bak/sshd_config /etc/ssh/

    附二:使用TELNET登录进行安装

    以root登录ssh 安装telnet服务,yum install telnet-server 关闭防火墙, systemctl stop firewalld 启动telnet服务 ,systemctl start telnet.socket 使用非root用户telnet登录,su root进行安装 安装完成验证ssh登录成功 登录ssh

    #退出telnet进程,exit #启动firewalld, systemctl start firewalld #关闭telnet服务, systemctl stop telnet.socket #卸载telnet-server, yum erase telnet-server

    附三:其他参考

    /etc/pam.d/sshd

    [root@localhost ~]# cat /etc/pam.d/sshd #%PAM-1.0 auth required pam_sepermit.so auth substack password-auth auth include postlogin # Used with polkit to reauthorize users in remote sessions -auth optional pam_reauthorize.so prepare account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session required pam_namespace.so session optional pam_keyinit.so force revoke session include password-auth session include postlogin # Used with polkit to reauthorize users in remote sessions -session optional pam_reauthorize.so prepare

    /usr/lib/systemd/system/sshd-keygen.service

    [Unit] Description=OpenSSH Server Key Generation ConditionFileNotEmpty=|!/etc/ssh/ssh_host_rsa_key ConditionFileNotEmpty=|!/etc/ssh/ssh_host_ecdsa_key ConditionFileNotEmpty=|!/etc/ssh/ssh_host_ed25519_key PartOf=sshd.service sshd.socket [Service] ExecStart=/usr/sbin/sshd-keygen Type=oneshot RemainAfterExit=yes /usr/lib/systemd/system/sshd.service [Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] Type=notify EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target

    /usr/lib/systemd/system/sshd@.service

    [Unit] Description=OpenSSH per-connection server daemon Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.service After=sshd-keygen.service [Service] EnvironmentFile=-/etc/sysconfig/sshd ExecStart=-/usr/sbin/sshd -i $OPTIONS StandardInput=socket /usr/lib/systemd/system/sshd.socket [Unit] Description=OpenSSH Server Socket Documentation=man:sshd(8) man:sshd_config(5) Conflicts=sshd.service [Socket] ListenStream=22 Accept=yes [Install] WantedBy=sockets.target

    附四:下载链接

    https://download.csdn.net/download/dimerchan/12551906

    Processed: 0.016, SQL: 9