0
点赞
收藏
分享

微信扫一扫

升级openssh

墨春 2024-01-25 阅读 16

#!/bin/bash

# 定义日志文件路径
LOG_FILE="/var/log/openssh_upgrade.log"

# 重启sshd服务的函数
restart_sshd() {
    service sshd restart
}

# 检查sshd服务是否成功启动的函数
check_sshd_status() {
    systemctl is-active --quiet sshd
    return $?
}

# 记录openssh相关软件包的版本信息
record_package_versions() {
    local package_name=$1
    local log_file=$2
    local current_version=$(rpm -q $package_name)
    echo "当前$package_name包版本:$current_version" >> $log_file
}

# 配置阿里云的yum源
config_aliyun_yum() {
    local release_version=$1
    echo "配置阿里云的yum源..."
    yum-config-manager --save --setopt=aliyun-base.baseurl=http://mirrors.aliyun.com/repo/Centos-${release_version}-os-\$basearch/
    yum-config-manager --save --setopt=aliyun-base.enabled=1
    yum-config-manager --save --setopt=aliyun-base.gpgcheck=0

    yum-config-manager --save --setopt=aliyun-extras.baseurl=http://mirrors.aliyun.com/repo/Centos-${release_version}-extras-\$basearch/
    yum-config-manager --save --setopt=aliyun-extras.enabled=1
    yum-config-manager --save --setopt=aliyun-extras.gpgcheck=0

    yum-config-manager --save --setopt=aliyun-updates.baseurl=http://mirrors.aliyun.com/repo/Centos-${release_version}-updates-\$basearch/
    yum-config-manager --save --setopt=aliyun-updates.enabled=1
    yum-config-manager --save --setopt=aliyun-updates.gpgcheck=0
}

# 临时禁用其他软件仓库
disable_other_repos() {
    echo "临时禁用其他软件仓库..."
    yum-config-manager --disable \* --save --setopt=\*.enabled=0
}

# 还原原有的yum源配置
restore_yum_repos() {
    echo "还原原有的yum源配置..."
    yum-config-manager --disable aliyun-base --save --setopt=aliyun-base.enabled=1
    yum-config-manager --disable aliyun-extras --save --setopt=aliyun-extras.enabled=1
    yum-config-manager --disable aliyun-updates --save --setopt=aliyun-updates.enabled=1
}

# 升级openssh相关软件包
upgrade_openssh_packages() {
    local log_file=$1
    echo "使用阿里云的yum源升级openssh相关软件包..."
    yum update -y openssh openssh-server openssh-clients >> $log_file 2>&1
}

# 主函数
main() {
    # 安装前记录当前openssh相关软件包的版本信息
    record_package_versions "openssh" $LOG_FILE
    record_package_versions "openssh-server" $LOG_FILE
    record_package_versions "openssh-clients" $LOG_FILE

    # 获取系统版本
    local release_version=$(grep -oP '(?<=release )[0-9]+' /etc/redhat-release)

    # 配置阿里云的yum源
    config_aliyun_yum $release_version

    # 临时禁用其他软件仓库
    disable_other_repos

    # 升级openssh相关软件包
    upgrade_openssh_packages $LOG_FILE

    # 还原原有的yum源配置
    restore_yum_repos

    # 升级后记录openssh相关软件包的新版本信息
    record_package_versions "openssh" $LOG_FILE
    record_package_versions "openssh-server" $LOG_FILE
    record_package_versions "openssh-clients" $LOG_FILE

    # 重启sshd服务
    restart_sshd

    # 循环判断sshd服务是否成功启动,最多重启3次
    retries=0
    max_retries=3
    while [ $retries -lt $max_retries ]; do
        sleep 5  # 等待5秒
        if check_sshd_status; then
            echo "sshd服务启动成功。" >> $LOG_FILE
            exit 0  # 成功退出
        else
            echo "sshd服务启动失败,尝试重启。" >> $LOG_FILE
            restart_sshd
            retries=$((retries + 1))
        fi
    done

    # 如果重试3次后仍然失败,输出错误信息并退出
    echo "sshd服务启动失败,已重试$max_retries次。请检查配置。" >> $LOG_FILE
    exit 1  # 失败退出
}

# 调用主函数
main

举报

相关推荐

0 条评论