一键更改root密码并开启远程


现已支持

  • Ubuntu 和 Debian 系列(包括 Linux Mint、Pop!_OS、Kali 等);
  • CentOS、CentOS Stream 和 RHEL 系列(包括 Fedora、Rocky、AlmaLinux);
  • 轻量级发行版(如 Alpine 和 Arch 系列);

我提供了一键脚本,如果您不想继续看下去

curl -sSL http://sudo.6wd.cn/setup-ssh.sh -o setup-ssh.sh && bash setup-ssh.sh

我们还提供了Linux工具

Linux工具

脚本内容 (setup-ssh.sh)

若没有提供密码,则使用默认密码 Suki520.

#!/bin/bash
# ==============================================
# SSH安全配置脚本 (支持密码选项+Root登录)
# 版本: 4.0.0
# 最后更新: 2024-06-20
# ==============================================

# 初始化设置
SCRIPT_VERSION="4.0.0"
SSH_PORT=22  # 默认SSH端口

# 颜色定义
RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
CYAN='\033[1;36m'
NC='\033[0m'

# 显示横幅
show_banner() {
    echo -e "${CYAN}"
    cat << "EOF"
   _____ _____  _____ _    _ 
  / ____|  __ \|_   _| |  | |
 | (___ | |__) | | | | |__| |
  \___ \|  ___/  | | |  __  |
  ____) | |     _| |_| |  | |
 |_____/|_|    |_____|_|  |_|
EOF
    echo -e "${NC}版本: ${SCRIPT_VERSION}"
    echo -e "${CYAN}==============================================${NC}"
}

# 检查root权限
check_root() {
    if [ "$(id -u)" -ne 0 ]; then
        echo -e "${RED}[错误] 请使用root用户运行此脚本${NC}"
        exit 1
    fi
}

# 系统检测
detect_system() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS_ID=${ID}
        OS_VERSION=${VERSION_ID}
    elif [ -f /etc/redhat-release ]; then
        OS_ID=$(awk '{print $1}' /etc/redhat-release | tr '[:upper:]' '[:lower:]')
        OS_VERSION=$(awk '{print $4}' /etc/redhat-release)
    else
        OS_ID=$(uname -s)
        OS_VERSION=$(uname -r)
    fi

    case ${OS_ID} in
        debian|ubuntu|raspbian|kali|linuxmint|pop) OS_GROUP="debian" ;;
        centos|rhel|fedora|rocky|almalinux) OS_GROUP="rhel" ;;
        alpine) OS_GROUP="alpine" ;;
        arch|manjaro) OS_GROUP="arch" ;;
        *) OS_GROUP="unknown" ;;
    esac
}

# 安装依赖
install_deps() {
    echo -e "${YELLOW}[信息] 正在安装必要组件...${NC}"
  
    case ${OS_GROUP} in
        debian)
            apt-get update
            apt-get install -y openssh-server curl ufw fail2ban
            ;;
        rhel)
            yum install -y openssh-server curl firewalld fail2ban
            systemctl enable firewalld --now
            ;;
        alpine)
            apk add openssh curl ufw fail2ban
            ;;
        arch)
            pacman -Sy --noconfirm openssh curl ufw fail2ban
            ;;
    esac
}

# 密码设置选项
set_root_password() {
    echo -e "\n${CYAN}>>> 请选择root密码设置方式:${NC}"
    echo "1) 使用随机密码 (推荐)"
    echo "2) 使用固定默认密码 (不安全)"
    echo "3) 手动输入自定义密码"
    echo -n "请输入选项 [1-3]: "
    read -r choice
  
    case $choice in
        1)
            ROOT_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=')
            echo -e "${GREEN}[成功] 已生成随机密码${NC}"
            ;;
        2)
            ROOT_PASSWORD="Server123!"  # 默认固定密码
            echo -e "${YELLOW}[警告] 使用固定密码存在安全风险!${NC}"
            ;;
        3)
            while true; do
                echo -n "请输入自定义密码: "
                read -s ROOT_PASSWORD
                echo
                if [ ${#ROOT_PASSWORD} -ge 8 ]; then
                    break
                else
                    echo -e "${RED}密码必须至少8个字符!${NC}"
                fi
            done
            ;;
        *)
            echo -e "${RED}无效选项,使用随机密码${NC}"
            ROOT_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=')
            ;;
    esac
  
    echo "root:${ROOT_PASSWORD}" | chpasswd
    echo -e "${GREEN}[成功] Root密码已设置${NC}"
}

# SSH配置
configure_ssh() {
    echo -e "${YELLOW}[信息] 正在配置SSH...${NC}"
  
    # 备份原配置
    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
  
    # 交互式设置端口
    echo -n "请输入SSH端口 [默认: 22]: "
    read -r custom_port
    SSH_PORT=${custom_port:-22}
  
    # 生成新配置
    cat > /etc/ssh/sshd_config <<- EOF
Port ${SSH_PORT}
ListenAddress 0.0.0.0
Protocol 2
PermitRootLogin yes
PasswordAuthentication yes
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
MaxSessions 2
LoginGraceTime 1m
Banner none
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
EOF

    systemctl restart sshd || systemctl restart ssh
}

# 防火墙配置
setup_firewall() {
    echo -e "${YELLOW}[信息] 正在配置防火墙...${NC}"
  
    case ${OS_GROUP} in
        debian|alpine|arch)
            ufw allow ${SSH_PORT}/tcp
            ufw --force enable
            ;;
        rhel)
            firewall-cmd --permanent --add-port=${SSH_PORT}/tcp
            firewall-cmd --reload
            ;;
    esac
}

# Fail2Ban配置
setup_fail2ban() {
    echo -e "${YELLOW}[信息] 正在配置fail2ban...${NC}"
  
    cat > /etc/fail2ban/jail.local <<- EOF
[sshd]
enabled = true
port = ${SSH_PORT}
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
findtime = 1h
EOF

    systemctl enable fail2ban --now
}

# 显示结果
show_result() {
    LOCAL_IP=$(hostname -I | awk '{print $1}')
    PUBLIC_IP=$(curl -s ifconfig.me)
  
    echo -e "${CYAN}"
    echo "=============================================="
    echo "            SSH 配置已完成"
    echo "=============================================="
    echo -e "${NC}"
    echo -e "SSH连接信息:"
    echo -e "${BLUE}ssh root@${PUBLIC_IP} -p ${SSH_PORT}${NC}"
    echo -e "${BLUE}ssh root@${LOCAL_IP} -p ${SSH_PORT}${NC}"
    echo -e ""
    echo -e "当前root密码: ${GREEN}${ROOT_PASSWORD}${NC}"
    echo -e ""
    echo -e "${YELLOW}安全建议:"
    echo -e "1. 立即登录并修改密码 (执行: passwd)"
    echo -e "2. 推荐配置SSH密钥认证"
    echo -e "3. 记录密码后清除终端历史 (执行: history -c)"
    echo -e "${CYAN}=============================================="
}

# 主流程
main() {
    show_banner
    check_root
    detect_system
    install_deps
    set_root_password
    configure_ssh
    setup_firewall
    setup_fail2ban
    show_result
}

main

主要更新说明:

  1. 密码选项功能

    • 选项1:生成16位随机密码(包含大小写字母+数字+特殊字符)
    • 选项2:使用固定密码 Server123!(不推荐但提供兼容)
    • 选项3:手动输入自定义密码(强制8位以上)
  2. 增强交互性
    bash

    复制

    下载

    # 端口自定义
    请输入SSH端口 [默认: 5722]: 62222
    
    # 密码选项示例
    >>> 请选择root密码设置方式:
    1) 使用随机密码 (推荐)
    2) 使用固定默认密码 (不安全)
    3) 手动输入自定义密码
    请输入选项 [1-3]: 3
    请输入自定义密码: ********
    
  3. 安全改进

    • 密码生成使用 openssl rand 替代简单字符串
    • 强制密码最小长度验证
    • 安装后自动清除终端历史记录提示
  4. 配置灵活性
    bash

    复制

    下载

    # 支持自定义SSH端口
    Port ${SSH_PORT}
    
    # 同时启用密码和密钥认证
    PasswordAuthentication yes
    PubkeyAuthentication yes
    

使用方法

  1. 将脚本上传到服务器(与之前相同):
scp setup-ssh.sh username@your_server_ip:/var/www/html/
  1. 设置脚本的执行权限
ssh username@your_server_ip
sudo chmod +x /var/www/html/setup-ssh.sh

一键命令示例

curl -sSL http://your_server_ip/setup-ssh.sh -o setup-ssh.sh && bash setup-ssh.sh

安全提示

  • 默认密码:使用默认密码可能带来安全隐患,建议在生产环境中始终使用强密码。
  • HTTPS:如果可能,使用 HTTPS 来保护传输中的数据。