#!/bin/bash

# 颜色设置
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

# 检查是否以 root 用户运行
if [ "$(id -u)" -ne "0" ]; then
    echo -e "${YELLOW}请使用 root 用户或使用 sudo 运行此脚本。${NC}"
    exit 1
fi

# 提示用户输入新的端口
read -p "$(echo -e ${GREEN}请输入新的 SSH 端口号： ${NC})" NEW_PORT

# 验证端口号是否有效
if ! [[ "$NEW_PORT" =~ ^[0-9]+$ ]]; then
    echo -e "${YELLOW}无效的端口号。请确保端口号是数字。${NC}"
    exit 1
fi

# 修改配置文件
if grep -q '^#Port ' /etc/ssh/sshd_config; then
    # 如果端口行被注释掉，删除注释并设置新端口
    sed -i 's/^#Port [0-9]*/Port '"$NEW_PORT"'/' /etc/ssh/sshd_config
else
    # 如果端口行未被注释，直接修改
    sed -i 's/^Port [0-9]*/Port '"$NEW_PORT"'/' /etc/ssh/sshd_config
fi

# 重新启动 SSH 服务
systemctl restart ssh

# 提示用户验证新端口
echo -e "${GREEN}SSH 服务已重新启动。请使用新端口 $NEW_PORT 进行连接。${NC}"

# 检查是否有进程仍在监听旧端口
if netstat -tuln | grep -q :22; then
    echo -e "${YELLOW}旧端口 22 仍在监听。请检查配置。${NC}"
else
    echo -e "${GREEN}旧端口 22 已不再监听。${NC}"
fi

# 完成
echo -e "${GREEN}端口修改完成。${NC}"