跳转至内容
0
  • 版块
  • 讨论
  • 最新
  • 标签
  • 热门
  • 顶端
  • 用户
  • 版块
  • 讨论
  • 最新
  • 标签
  • 热门
  • 顶端
  • 用户
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Zephyr)
  • 不使用皮肤
折叠
JIKE社区
  1. 首页
  2. 讨论区
  3. 技术专区
  4. CentOS 7 升级 OpenSSH 版本脚本

CentOS 7 升级 OpenSSH 版本脚本

已定时 已固定 已锁定 已移动 技术专区
1 帖子 1 发布者 91 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 我是小马甲~M 在线
    我是小马甲~M 在线
    我是小马甲~
    🤫
    写于 最后由 编辑
    #1

    如果服务器不能联网需要将 安装包复制到 /opt/

    安装包下载地址:

    https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
    https://www.openssl.org/source/openssl-1.1.1q.tar.gz
    https://www.zlib.net/zlib-1.3.1.tar.gz
    

    千万不要关闭SHELL窗口!
    千万不要关闭SHELL窗口!
    千万不要关闭SHELL窗口!

    #!/bin/bash
    clear
    echo -e "\033[1m\033[33m 本脚本目前实测在CentOS 7可用,会自动升级openssl 1.1.1版本 和 zlib 1.3.1 版本 \033[0m"
    echo " "
    echo -e "\033[1m\033[33m 如服务器不能联网请将安装包复制到目录 /opt/ 中,因为要安装依赖,需添加本地安装源 参考:51.ruyo.net/18728.html \033[0m"
    echo " "
    echo -e "\033[1m\033[31m重要提示:升级组件是高风险操作,很容易出现系统无法启动无法SSH远程或业务崩溃等问题。\033[0m"
    echo " "
    echo -e "\033[1m\033[33m若是生产环境,请务必做好快照或数据备份后操作。\033[0m"
    echo " "
    echo -e "\033[1m\033[34m若已做好了备份,请输入y回车继续安装,若不升级,输入n离开。\033[0m"
    echo " "
    echo -e "\033[1m\033[33m因安装过程中需要卸载openssh,所以安装过程中务必【不要关闭终端】,不然无法连接SSH\033[0m"
    echo " "
    read -p "三思而后行,上面提示有查看吗?继续执行升级操作吗? (y/n): " choice  
    echo " "
    
    if [[ "$choice" != "y" && "$choice" != "Y" ]]; then
        echo "操作已取消。"
        exit 0
    fi
    
    # 版本定义
    zlib_version="zlib-1.3.1"
    openssl_version="openssl-1.1.1q"
    openssh_version="openssh-9.9p1"
    
    # 路径定义
    install_dir="/usr/local"
    work_dir="/opt"
    install_log="/opt/install.log"
    
    # 安装包路径
    zlib_package="$work_dir/$zlib_version.tar.gz"
    openssl_package="$work_dir/$openssl_version.tar.gz"
    openssh_package="$work_dir/$openssh_version.tar.gz"
    
    # 安装依赖
    echo -e "\033[33m 正在安装必要依赖包... \033[0m"
    yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel zlib-devel wget tar >/dev/null 2>&1
    if [[ $? -ne 0 ]]; then
        echo -e "\033[31m 依赖包安装失败,请检查网络连接或本地软件源配置。 \033[0m"
        exit 1
    fi
    
    # 下载必要文件
    download_package() {
        local url=$1
        local target=$2
        if [[ ! -e $target ]]; then
            echo -e "\033[33m 下载 $target... \033[0m"
            wget --no-check-certificate -O $target $url
            if [[ $? -ne 0 ]]; then
                echo -e "\033[31m 下载 $target 失败,请检查网络连接。 \033[0m"
                exit 1
            fi
        else
            echo -e "\033[32m 检测到 $target 已存在,跳过下载。 \033[0m"
        fi
    }
    
    download_package "https://www.zlib.net/$zlib_version.tar.gz" $zlib_package
    download_package "https://www.openssl.org/source/$openssl_version.tar.gz" $openssl_package
    download_package "https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/$openssh_version.tar.gz" $openssh_package
    
    # 安装 zlib
    install_zlib() {
        echo -e "\033[33m 开始安装 zlib... \033[0m"
        tar -xzf $zlib_package -C $work_dir
        cd $work_dir/$zlib_version
        ./configure --prefix=$install_dir/$zlib_version && make && make install
        echo "$install_dir/$zlib_version/lib" > /etc/ld.so.conf.d/zlib.conf
        ldconfig
    }
    
    # 安装 OpenSSL
    install_openssl() {
        echo -e "\033[33m 开始安装 OpenSSL... \033[0m"
        tar -xzf $openssl_package -C $work_dir
        cd $work_dir/$openssl_version
        ./config shared zlib --prefix=$install_dir/$openssl_version && make && make install
        ln -sf $install_dir/$openssl_version/bin/openssl /usr/bin/openssl
        ln -sf $install_dir/$openssl_version/lib/libssl.so.1.1 /usr/lib64/
        ln -sf $install_dir/$openssl_version/lib/libcrypto.so.1.1 /usr/lib64/
        ldconfig
    }
    
    # 安装 OpenSSH
    install_openssh() {
        echo -e "\033[33m 开始安装 OpenSSH... \033[0m"
        tar -xzf $openssh_package -C $work_dir
        cd $work_dir/$openssh_version
        ./configure --prefix=$install_dir/$openssh_version \
            --sysconfdir=/etc/ssh \
            --with-zlib=$install_dir/$zlib_version \
            --with-ssl-dir=$install_dir/$openssl_version \
            --without-openssl-header-check
        make && make install
        cp $work_dir/$openssh_version/sshd_config /etc/ssh/
    }
    
    # 修复 sshd_config 配置
    fix_sshd_config() {
        echo -e "\033[33m 修复 sshd_config 文件... \033[0m"
        sed -i 's/^GSSAPIAuthentication/#GSSAPIAuthentication/' /etc/ssh/sshd_config
        sed -i 's/^GSSAPICleanupCredentials/#GSSAPICleanupCredentials/' /etc/ssh/sshd_config
        sed -i 's/^UsePAM/#UsePAM/' /etc/ssh/sshd_config
    }
    
    # 生成主机密钥
    generate_host_keys() {
        echo -e "\033[33m 生成缺失的主机密钥... \033[0m"
        ssh-keygen -A
        if [[ $? -ne 0 ]]; then
            echo -e "\033[31m 主机密钥生成失败,请检查日志。 \033[0m"
            exit 1
        fi
    }
    
    # 修复密钥权限
    fix_key_permissions() {
        echo -e "\033[33m 修复主机密钥权限... \033[0m"
        for key_file in /etc/ssh/ssh_host_*.key; do
            if [[ -e $key_file ]]; then
                chmod 600 $key_file
            else
                echo -e "\033[31m 主机密钥 $key_file 不存在,重新生成... \033[0m"
                ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
                ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""
                ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
                chmod 600 /etc/ssh/ssh_host_*.key
            fi
        done
    }
    
    
    
    replace_old_binaries() {
        echo -e "\033[33m 替换旧版本的 OpenSSH 二进制文件... \033[0m"
        cp $install_dir/$openssh_version/sbin/sshd /usr/sbin/sshd
        cp $install_dir/$openssh_version/bin/ssh /usr/bin/ssh
        cp $install_dir/$openssh_version/bin/scp /usr/bin/scp
        cp $install_dir/$openssh_version/bin/sftp /usr/bin/sftp
        echo -e "\033[32m 替换完成。 \033[0m"
    }
    
    
    # 重启 sshd 服务
    restart_sshd() {
        echo -e "\033[33m 重启 sshd 服务... \033[0m"
        systemctl restart sshd
        if [[ $? -ne 0 ]]; then
            echo -e "\033[31m sshd 服务启动失败,请检查日志。 \033[0m"
            journalctl -xe | tail -n 20
            exit 1
        else
            echo -e "\033[32m sshd 服务已成功启动。 \033[0m"
        fi
    }
    
    # 执行安装步骤
    install_zlib
    install_openssl
    install_openssh
    fix_sshd_config
    #generate_host_keys
    #fix_key_permissions
    replace_old_binaries
    restart_sshd
    
    # 验证安装
    echo -e "\033[32m 安装完成,版本信息如下: \033[0m"
    openssl version
    ssh -V
    
    
    

    唐宋元明清,连排小工兵!

    1 条回复 最后回复
    0
    回复
    • 在新帖中回复
    登录后回复
    • 从旧到新
    • 从新到旧
    • 最多赞同


    Popular Topics - 热门主题
    • Bug! Bug !Google One 学生优惠 可无门槛验证
      mztcM
      mztc
      3
      14
      4.9k

    • 中国科技云免费白嫖1 年 Cursor 使用权!快~~~
      D
      d914954480
      1
      7
      1.7k

    • MySQL 8.0 OCP 限时免费考
      HebutMrLiuH
      HebutMrLiu
      1
      5
      280

    • 阿里云国际站轻量应用服务器 2C+1G+200M带宽 仅9.9美元一年!
      T
      Test
      1
      4
      1.1k

    • <海外剧>行尸走肉:死城 第二季[2025][惊悚 恐怖 冒险][附行尸走肉 系列全部]
      我是小马甲~M
      我是小马甲~
      1
      3
      23

    • 免费科技代理流量巨多
      M
      midpoint
      1
      2
      66

    • 登录

    • 没有帐号? 注册

    • 登录或注册以进行搜索。
    百度网盘
    1,174 个主题
    连续剧
    698 个主题
    国产剧
    564 个主题
    美剧
    338 个主题
    中国移动
    307 个主题
    动画片
    231 个主题
    中国电信
    222 个主题
    动作片
    206 个主题

    256

    在线

    39.9k

    用户

    40.1k

    主题

    110.4k

    帖子
    • 第一个帖子
      最后一个帖子