#!/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