#!/bin/bash

# 确保以 root 权限运行
if [ "$EUID" -ne 0 ]; then 
  echo "请使用 sudo 或 root 账号运行此脚本"
  exit 1
fi

CONF_FILE="/etc/ssh/sshd_config"
BACKUP_FILE="/etc/ssh/sshd_config.bak.$(date +%F_%T)"

echo "开始优化 SSH 配置..."

# 1. 备份原始文件
cp $CONF_FILE $BACKUP_FILE
echo "已备份原始配置至: $BACKUP_FILE"

# 定义优化函数：如果 key 存在则修改，不存在则追加
update_config() {
    local key=$1
    local value=$2
    if grep -q "^#\?${key}" "$CONF_FILE"; then
        # 匹配可能被注释掉的行并替换
        sed -i "s/^#\?${key}.*/${key} ${value}/" "$CONF_FILE"
    else
        # 不存在则直接追加到文件末尾
        echo "${key} ${value}" >> "$CONF_FILE"
    fi
}

# 2. 执行具体配置修改
echo "正在应用性能优化参数..."
update_config "GSSAPIAuthentication" "no"
update_config "GSSAPICleanupCredentials" "no"
update_config "UseDNS" "no"
update_config "ClientAliveInterval" "60"
update_config "ClientAliveCountMax" "3"

# 3. 检查语法并重启服务
echo "正在校验 SSH 配置语法..."
/usr/sbin/sshd -t
if [ $? -eq 0 ]; then
    echo "语法检查通过，正在重启 SSHD 服务..."
    systemctl restart sshd
    echo "优化完成！"
else
    echo "错误：SSH 配置语法检测失败，请检查 $CONF_FILE。已为您保留备份。"
    exit 1
fi