OpenSSH9.3p1升级实践

发布时间 2023-05-06 16:43:54作者: 哥伦布

安装Telnet服务

为了避免升级OpenSSH导致服务器不可连接。需要先下载安装Telnet组件。升级期间使用Telnet作为升级期间的服务器连接方式。

  1. 先查询telnet是否安装
    rpm -qa telnet
  2. 如果没有安装则执行以下语句安装
    yum -y install telnet
  3. 查询telnet-server是否安装
    rpm -qa telnet-server
  4. 如果没有安装则执行以下语句安装
    yum -y install telnet-server
  5. 防火墙状态放行telent
    firewall-cmd --permanent --add-port=23/tcp --zone=public
  6. 防火墙重新载入
    firewall-cmd --reload

*注意:

  • 若防火墙是已经禁用。请略过防火墙相关命令
  • 若防火墙是暂时停止。建议先启动防火墙,添加访问策略!否则重装过程需要服务器重启,重启后可能因为防火墙原因无法通过telnet访问服务器。如果OpenSSH又安装失败,将导致服务器不可连接。附:防火墙启动命令 systemctl start firewalld

创建使用Telnet服务的账户

因为默认情况root 不能直接登录telnet
创建一个新用户用于登录elnet服务,这个账号升级完成后需要进行删除。

  1. 创建账号
    sudo useradd tempuser
  2. 设置密码
    sudo passwd tempuser
    输入一个密码,例如:Mycar=998
    后续访问的时候,通过XShell工具连接
    先用tempuser登录后,再使用
    su root
    切换到root用户。

升级OpenSSH

以下命令是使用Telnet连接后,切换到root账户进行操作。

  1. 安装相关命令依赖
    yum install -y rpm-build gcc gcc-c++ glibc glibc-devel openssl-devel openssl pcre-devel zlib zlib-devel make wget krb5-devel pam-devel libX11-devel xmkmf libXt-devel initscripts libXt-devel imake gtk2-devel lrzsz
  2. 备份原SSH配置
    cp -rp /etc/ssh /etc/ssh.bak
  3. 停止SSH服务
    systemctl stop sshd
  4. 查看安装的ssh
    rpm -qa | grep openssh
  5. 卸载rpm安装的ssh
    yum remove openssh*
  6. 创建制作rpm相关目录
    mkdir -pv /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
  7. 下载openssh和x11-ssh-askpass安装包
    cd /root/rpmbuild/SOURCES/
    wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.3p1.tar.gz
    tar -xf openssh-9.3p1.tar.gz
    wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz
  8. 编辑编译配置文件
    cp openssh-9.3p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS/
    cd /root/rpmbuild/SPECS/
    不生产ask包
    sed -i -e "s/%global no_gnome_askpass 0/%global no_gnome_askpass 1/g" openssh.spec
    sed -i -e "s/%global no_x11_askpass 0/%global no_x11_askpass 1/g" openssh.spec
    修改openssl-devel的报错
    sed -i '/openssl-devel < 1.1/s/^/#/' openssh.spec
    修改PreReq的报错
    sed -i '/PreReq:/s/^/#/' openssh.spec
  9. 编译文件
    rpmbuild -ba openssh.spec
    运行后,/root/rpmbuild/RPMS/x86_64/目录应该有openssh-9.3p1-1.el7.x86_64.rpm、openssh-debuginfo-9.3p1-1.el7.x86_64.rpm、openssh-clients-9.3p1-1.el7.x86_64.rpm、openssh-server-9.3p1-1.el7.x86_64.rpm四个文件。
  10. 升级OpenSSH
    cd /root/rpmbuild/RPMS/x86_64/
    yum localinstall openssh-9.3p1-1.el7.x86_64.rpm openssh-clients-9.3p1-1.el7.x86_64.rpm openssh-server-9.3p1-1.el7.x86_64.rpm -y
  11. 验证OpenSSH是否升级成功
    修改文件权限
    chmod 600 /etc/ssh/ssh_host_rsa_key
    chmod 600 /etc/ssh/ssh_host_ecdsa_key
    chmod 600 /etc/ssh/ssh_host_ed25519_key
    检查是否有配置错误
    sshd -t
    如果/etc/pam.d/sshd配置丢失,从其他机器拷贝一份配置过来
    注释掉/etc/pam.d/password-auth /etc/pam.d/system-auth中uid >= 1000的行,否则root不能登陆
    sed -i '/uid < 1000/s/^/#/' /etc/pam.d/password-auth
    sed -i '/uid < 1000/s/^/#/' /etc/pam.d/system-auth
    修改/etc/ssh/sshd_config
    sed -i '/^#PermitRootLogin yes/s/^#//' /etc/ssh/sshd_config
    重启sshd服务
    systemctl restart sshd
    添加到自启动
    chkconfig --add sshd

查看升级后的ssh版本

重新使用SSH连接后,查看SSH版本
ssh -V
看到对应的版本为正常
如果有条件,建议重启服务器一下看SSH是否能正常登录。

关闭Telnet服务

  1. 停止Telnet 服务
    systemctl stop telnet.socket
  2. 禁用Telnet服务开机启动
    systemctl disable telnet.socket

删除临时用户

  1. 使用命令删除临时用户
    userdel -rf tempuser

可能遇到的其他问题

  1. 编译安装过程提示:Protected multilib versions: zlib-1.2.7-20.el7_9.x86_64 != zlib-1.2.7-19.el7_9.i686
    执行如下命令:
    yum install -y zlib zlib-devel --setopt=protected_multilib=false

  2. 编译安装过程提示:configure: error: PAM headers not found
    执行如下命令:
    yum -y install pam-devel

原文链接:https://www.cnblogs.com/cynriczgc/p/17255368.html