SSH安全加固脚本模板(Shell 脚本)

admin 2025年7月1日13:12:12评论13 views字数 3230阅读10分46秒阅读模式
SSH安全加固脚本模板(Shell 脚本)
这是一个完整的 SSH 安全加固 Shell 脚本模板,适用于常见的 Linux 系统(如 CentOS、Ubuntu)。该脚本功能
  • 禁用不必要的 SSH 功能
  • 强制使用密钥认证
  • 限制登录用户和来源 IP
  • 配置日志审计
  • 设置登录失败次数限制
  • 禁止 root 登录
使用说明
前提条件:
  • 以 root 权限运行脚本
  • 已安装 openssh-server
  •  脚本功能概览:
功能
描述
修改 /etc/ssh/sshd_config
关键安全配置项设置
重启 sshd 服务
应用新配置
创建白名单用户组
仅允许特定用户登录
设置登录失败限制
防止暴力破解
启用防火墙规则
可选,限制 SSH 访问源
完整 Shell 脚本:ssh_secure.sh
📚

#!/bin/bash

============ 全局变量定义 ============
SSHD_CONFIG="/etc/ssh/sshd_config"
BACKUP_DIR="/etc/ssh/backup"
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
LOG_FILE="/var/log/ssh_secure.log"

============ 日志记录函数 ============
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] $1" | tee -a "$LOG_FILE"
}

error_log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] $1" | tee -a "$LOG_FILE"
}

============ 备份配置文件 ============
backup_sshd_config() {
    if [ ! -d "$BACKUP_DIR" ]; then
        mkdir -p "$BACKUP_DIR"
    fi
    cp "$SSHD_CONFIG" "$BACKUP_DIR/sshd_config.bak.$TIMESTAMP"
    log "备份 SSH 配置文件到: $BACKUP_DIR/sshd_config.bak.$TIMESTAMP"
}

============ 修改 SSH 配置 ============
configure_sshd() {
    log "开始修改 SSH 配置..."

    # 备份原有配置
    backup_sshd_config

    # 替换或添加关键配置项
    sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' "$SSHD_CONFIG"
    echo "PermitRootLogin no" >> "$SSHD_CONFIG"

    echo "PasswordAuthentication no" >> "$SSHD_CONFIG"
    echo "PubkeyAuthentication yes" >> "$SSHD_CONFIG"
    echo "PermitEmptyPasswords no" >> "$SSHD_CONFIG"
    echo "AllowTcpForwarding no" >> "$SSHD_CONFIG"
    echo "GatewayPorts no" >> "$SSHD_CONFIG"
    echo "X11Forwarding no" >> "$SSHD_CONFIG"
    echo "MaxAuthTries 3" >> "$SSHD_CONFIG"
    echo "LogLevel VERBOSE" >> "$SSHD_CONFIG"
    echo "ClientAliveInterval 300" >> "$SSHD_CONFIG"
    echo "ClientAliveCountMax 0" >> "$SSHD_CONFIG"

    log "SSH 配置修改完成。"
}

============ 创建登录白名单用户组 ============
create_ssh_users_group() {
    read -p "请输入允许 SSH 登录的用户名列表(空格分隔):" USERS
    for USER in $USERS; do
        if id "$USER" &>/dev/null; then
            echo "AllowUsers $USER" >> "$SSHD_CONFIG"
        else
            error_log "用户 $USER 不存在,跳过。"
        fi
    done
    log "已设置 AllowUsers 白名单。"
}

============ 配置 PAM 登录限制 ============
configure_pam_limits() {
    log "配置 PAM 登录限制..."
    echo "auth required pam_access.so" >> /etc/pam.d/sshd
    echo "auth required pam_tally2.so deny=5 unlock_time=600" >> /etc/pam.d/sshd
    log "PAM 登录限制配置完成。"
}

============ 配置防火墙规则(可选) ============
configure_firewall() {
    read -p "是否启用防火墙限制 SSH 源地址?(y/n): " SET_FIREWALL
    if [[ "$SET_FIREWALL" == "y" ]]; then
        read -p "请输入允许访问 SSH 的 IP 地址范围(如 192.168.1.0/24 或多个IP空格分隔):" IPS
        for IP in $IPS; do
            iptables -A INPUT -p tcp --dport 22 -s "$IP" -j ACCEPT
        done
        iptables -A INPUT -p tcp --dport 22 -j DROP
        service iptables save || true
        log "防火墙规则已限制 SSH 源地址。"
    fi
}

============ 重启 SSHD 服务 ============
restart_sshd() {
    log "重启 SSH 服务..."
    systemctl restart sshd
    if systemctl is-active --quiet sshd; then
        log "SSH 服务重启成功。"
    else
        error_log "SSH 服务重启失败,请手动检查。"
        exit 1
    fi
}

============ 主函数 ============
main() {
    log "开始执行 SSH 安全加固脚本..."

    configure_sshd
    create_ssh_users_group
    configure_pam_limits
    configure_firewall
    restart_sshd

    log "SSH 安全加固已完成!请确保保留当前终端连接,避免被锁在外面。"
}
main

脚本安全建议
  • 测试环境先试运行,防止误操作导致无法登录。
  • 保留当前终端连接,以防配置错误导致断连。
  • 定期更新白名单用户和 IP 地址。
  • 结合堡垒机(Jump Server)使用更佳。
加固后的 SSH 配置摘要(示例)
🎼

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
AllowTcpForwarding no
GatewayPorts no
X11Forwarding no
MaxAuthTries 3
LogLevel VERBOSE
ClientAliveInterval 300
ClientAliveCountMax 0
AllowUsers user1 user2

补充建议
项目
建议
密钥管理
使用强密码保护私钥,禁用无密码密钥
登录审计
查看 /var/log/secure 或 journalctl -u sshd
自动化工具
可使用 Ansible、SaltStack 等进行批量部署
定期扫描
使用 Nessus、OpenVAS 扫描 SSH 安全性

原文始发于微信公众号(运维星火燎原):SSH安全加固脚本模板(Shell 脚本)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年7月1日13:12:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SSH安全加固脚本模板(Shell 脚本)https://cn-sec.com/archives/4215463.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息