【第23期】Linux系统初始化脚本:从裸机到生产级的一键方案

奥黛丽·逐爱者
2026-05-22 / 0 评论 / 5 阅读 / 正在检测是否收录...

做运维这么多年,我见过太多这样的场景:新服务器到货,上架装好系统,丢那儿就不管了。等到业务跑上去,三天两头出状况——SSH被爆破、OOM被杀进程、磁盘写满没人管、连接数爆了服务直接挂。回过头一问:系统装完之后,你做了什么初始化?对方一脸茫然:装完不就用了么?

这就是问题所在。一个裸装的 Linux 系统,说白了就是一间毛坯房——能住人,但住得不舒服,也不安全。今天这篇,我就把这套压箱底的初始化脚本完整分享出来。从安全加固到性能调优,再到常用软件的自动化部署,一键跑完,你的系统就直接达到生产标准。

适用范围:CentOS 7/8/9、Rocky Linux、AlmaLinux、Ubuntu 20.04/22.04/24.04、Debian 11/12。脚本里会自动识别发行版,不用你操心。

一、安全加固:别让服务器裸奔

安全这事儿,怎么强调都不为过。我见过一台新服务器,从装好系统到被黑客拿下,只用了不到48小时。攻击者扫到了默认22端口,用弱口令字典暴力破解,进去之后直接装了挖矿程序。等我们发现的时候,CPU已经满载跑了一个星期。

所以第一步,先把门焊死。

1.1 SSH 加固

SSH 是服务器的第一道门,也是最容易被盯上的一扇门。默认配置下,它几乎就是在向攻击者招手:端口22、允许root登录、密码认证。改起来其实很简单:

# 备份原始配置 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 修改关键参数 sed -i 's/^#\?Port 22/Port 2222/' /etc/ssh/sshd_config sed -i 's/^#\?PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sed -i 's/^#\?PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sed -i 's/^#\?X11Forwarding yes/X11Forwarding no/' /etc/ssh/sshd_config sed -i 's/^#\?MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config sed -i 's/^#\?LoginGraceTime 2m/LoginGraceTime 30/' /etc/ssh/sshd_config # 追加禁止空密码 echo 'PermitEmptyPasswords no' >> /etc/ssh/sshd_config # 重启生效 systemctl restart sshd

几个要点挨个说:

改端口:把22改成2222(或者随便一个高位端口)。这不是什么高级安全手段,但能挡住90%以上的自动化扫描。那些扫22端口的脚本,可不会傻到从1扫到65535。

禁止 root 直登:这是铁律。先用普通用户登录,再 su 或 sudo 提权。就算密码泄露了,攻击者拿到的也是个低权限账号。

关闭密码认证:改用密钥登录。密钥的强度远比密码靠谱,而且丢了可以立刻吊销。

最大尝试次数:从6降到3,减少暴力破解的时间窗口。配合后面的 fail2ban,基本就把SSH爆破这条路堵死了。

1.2 配置密钥登录

禁用密码之前,得先配好密钥。不然把自己锁在外面,那可真叫一个尴尬:

# 生成密钥对(本地电脑执行) ssh-keygen -t ed25519 -C "admin@company.com" # 复制公钥到服务器 ssh-copy-id -p 2222 user@server_ip # 验证密钥登录(关闭密码认证前务必测试!) ssh -p 2222 user@server_ip

这里推荐用 ed25519 算法,比传统的 RSA 更快更安全,密钥也更短。RSA 当然也能用,但已经是上一代方案了。

1.3 防火墙配置

防火墙不是万能的,但没有防火墙是万万不能的。很多人觉得云服务器有安全组就够了,这话没错,但主机层面的防火墙是最后一道防线。安全组是云厂商层面的,万一配置出错呢?多层防御总归更靠谱。

CentOS/RHEL 系列用 firewalld,Ubuntu/Debian 用 ufw:

# CentOS/RHEL - firewalld systemctl enable firewalld systemctl start firewalld firewall-cmd --permanent --remove-service=ssh firewall-cmd --permanent --add-port=2222/tcp firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" accept' firewall-cmd --reload # Ubuntu/Debian - ufw apt install -y ufw ufw default deny incoming ufw default allow outgoing ufw allow 2222/tcp ufw allow 80/tcp ufw allow 443/tcp ufw allow from 10.0.0.0/8 ufw --force enable

这里有个很实用的技巧:允许内网段(比如 10.0.0.0/8)的全部流量。这样内网服务器之间通信不受限制,但来自外网的访问只能走开放的几个端口。

1.4 用户与权限管理

一个新系统,第一件事就是创建管理用户。永远不要用 root 跑业务,这不是建议,是规定:

# 创建管理用户 useradd -m -s /bin/bash admin # 设置强密码(16位以上,包含大小写、数字、特殊字符) passwd admin # 添加到 wheel/sudo 组 usermod -aG wheel admin        # CentOS/RHEL usermod -aG sudo admin         # Ubuntu/Debian # 配置 sudo 免密码(可选,仅限密钥登录场景) echo 'admin ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/admin chmod 440 /etc/sudoers.d/admin # 锁定不需要的系统账号 for user in games lp news uucp proxy list irc gnats; do    usermod -L $user 2>/dev/null done

密码策略也得配上。别指望用户自觉设置强密码,用 pam_pwquality 模块强制要求:

# 密码复杂度策略 echo 'minlen=12' >> /etc/security/pwquality.conf echo 'minclass=3' >> /etc/security/pwquality.conf echo 'maxrepeat=3' >> /etc/security/pwquality.conf echo 'difok=5' >> /etc/security/pwquality.conf # 密码过期策略 sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS   90/' /etc/login.defs sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS   7/' /etc/login.defs sed -i 's/^PASS_MIN_LEN.*/PASS_MIN_LEN     12/' /etc/login.defs sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE   14/' /etc/login.defs

minlen=12:密码最少12位

minclass=3:至少包含3种字符类型(大写、小写、数字、特殊字符)

maxrepeat=3:不允许同一个字符连续出现3次以上

difok=5:新密码必须与旧密码至少5个字符不同

PASS_MAX_DAYS=90:密码90天强制更换

1.5 安装 fail2ban

fail2ban 是个好东西。它监控日志文件,发现某个 IP 在短时间内多次认证失败,就直接把它拉进防火墙黑名单。简单、粗暴、有效:

# CentOS/RHEL yum install -y epel-release yum install -y fail2ban # Ubuntu/Debian apt install -y fail2ban # 配置 cat > /etc/fail2ban/jail.local << 'EOF' [DEFAULT] bantime = 3600 findtime = 600 maxretry = 3 banaction = firewallcmd-ipset [sshd] enabled = true port = 2222 maxretry = 3 bantime = 86400 findtime = 300 EOF systemctl enable fail2ban systemctl start fail2ban

配置里的参数含义很简单:600秒内失败3次,封禁24小时。这招对付SSH爆破特别管用,日志里能看到大量被ban的IP,心里踏实。

1.6 系统安全基线

还有一些系统级别的安全设置,不起眼但很关键:

# 禁止 Ctrl+Alt+Del 重启 systemctl mask ctrl-alt-del.target # 限制 su 命令只能被 wheel 组使用 sed -i 's/^#\?auth.*pam_wheel.so/\auth\trequired\tpam_wheel.so use_uid/' /etc/pam.d/su # 设置 umask echo 'umask 027' >> /etc/profile echo 'umask 027' >> /etc/bashrc # 锁定关键文件防止篡改 chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow # 注意:如果需要添加用户,需要先 chattr -i 解锁 # 历史命令记录增强 echo 'export HISTSIZE=10000' >> /etc/profile echo 'export HISTFILESIZE=20000' >> /etc/profile echo 'export HISTTIMEFORMAT="%F %T "' >> /etc/profile echo 'export PROMPT_COMMAND="history -a"' >> /etc/profile # 禁用不用的文件系统模块 echo 'install cramfs /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install freevxfs /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install jffs2 /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install hfs /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install hfsplus /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install squashfs /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install udf /bin/true' >> /etc/modprobe.d/disablefs.conf

那个 chattr +i 要注意,锁定之后连 root 都不能修改这些文件。需要添加用户的时候,记得先 chattr -i 解锁,改完再锁回去。我一开始用这个功能的时候,就把自己坑过好几次。

二、内核参数调优:让系统跑得更快更稳

安全搞定了,接下来是性能。Linux 内核的参数默认值偏向保守,什么场景都能用,但什么场景都不是最优。调优的核心思路就一条:根据实际业务需求,把系统资源的利用效率拉到最高。

所有内核参数都写在 /etc/sysctl.conf 里,一条 sysctl -p 就能生效。下面是我经过多次实战打磨后的参数组合:

cat >> /etc/sysctl.conf << 'EOF' # ===== 网络优化 ===== # 开启SYN Cookie,防止SYN洪水攻击 net.ipv4.tcp_syncookies = 1 # SYN队列大小,默认128太小,调到1024 net.ipv4.tcp_max_syn_backlog = 1024 # 已建立连接队列 net.core.somaxconn = 2048 # TIME_WAIT状态的连接最大数量 net.ipv4.tcp_max_tw_buckets = 6000 # 快速回收TIME_WAIT连接(NAT环境下不建议开启) net.ipv4.tcp_tw_recycle = 0 # 允许重用TIME_WAIT连接 net.ipv4.tcp_tw_reuse = 1 # TCP keepalive时间,默认7200秒太长,改为600秒 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 5 # 启用TCP快速打开 net.ipv4.tcp_fastopen = 3 # 连接跟踪表大小(根据内存调整,公式:CONNTRACK_SIZE=内存GB*200000) net.netfilter.nf_conntrack_max = 655360 # 本地端口范围,默认32768-60999太窄 net.ipv4.ip_local_port_range = 1024 65535 # ===== 内存优化 ===== # 减少swap使用倾向(0=尽量不用,100=积极使用) vm.swappiness = 10 # 允许超量分配内存 vm.overcommit_memory = 1 # 内存溢出时杀死进程的策略 vm.overcommit_ratio = 90 # OOM时保护系统进程 vm.panic_on_oom = 0 # ===== 文件系统优化 ===== # 单进程最大文件打开数 fs.file-max = 1048576 # inode缓存最大数量 fs.inotify.max_user_watches = 524288 # ===== 其他 ===== # 核心转储 kernel.core_pattern = /var/crash/core-%e-%p-%t # 禁止普通用户访问内核日志 kernel.dmesg_restrict = 1 # 限制ptrace(防止进程调试注入) kernel.yama.ptrace_scope = 1 EOF sysctl -p

挑几个重点参数解释一下:

net.core.somaxconn = 2048:这个参数控制每个监听端口能排队的最大连接数。默认128在高并发场景下根本不够用。Nginx、Redis 这类服务,一旦连接数上来,超出这个值的请求直接就被内核丢掉了,你的应用层甚至收不到这些请求。

vm.swappiness = 10:告诉内核尽量用物理内存,少用swap。对于跑数据库或缓存服务的机器,swap一上来性能就断崖式下跌。设成10意味着只有内存用到90%以上才会考虑swap。

vm.overcommit_memory = 1:允许超量分配内存。很多应用(比如Redis fork子进程做RDB快照)需要短时间内申请大量内存,实际上并不会全部用完。默认策略0会在某些情况下拒绝合理的内存申请,导致进程启动失败。

net.ipv4.tcp_tw_reuse = 1:高并发短连接场景下,大量连接会进入 TIME_WAIT 状态。开启复用可以让这些端口尽快被新连接使用,避免端口耗尽。

配合 sysctl 调优,用户级别的资源限制也得配上:

cat >> /etc/security/limits.conf << 'EOF' *    soft    nofile    65535 *    hard    nofile    65535 *    soft    nproc     65535 *    hard    nproc     65535 *    soft    core      unlimited *    hard    core      unlimited root soft    nofile    65535 root hard    nofile    65535 EOF

nofile 是最大打开文件数,nproc 是最大进程数。这两个值对高并发服务影响巨大。我之前调过一个电商系统,峰值QPS上到2万的时候,Nginx 疯狂报错 "too many open files",查了一下发现默认的 nofile 只有1024。改到65535之后,问题立消失。

三、系统优化与清理

系统跑久了,日志文件越来越大、临时文件堆成山、无用服务占用资源。这些事儿不处理,再好的硬件也扛不住。

3.1 日志管理

日志是排查问题的利器,但不加限制地记录日志,磁盘分分钟被撑爆。见过一台生产服务器,/var/log 占了50GB,系统盘一共才40GB,直接导致磁盘写满服务全挂:

# 配置 journald 日志限制 mkdir -p /etc/systemd/journald.conf.d cat > /etc/systemd/journald.conf.d/limit.conf << 'EOF' [Journal] SystemMaxUse=500M SystemMaxFileSize=100M MaxRetentionSec=30day ForwardToSyslog=no EOF systemctl restart systemd-journald # 配置 logrotate cat > /etc/logrotate.d/custom << 'EOF' /var/log/messages /var/log/secure /var/log/cron {    daily    rotate 7    compress    delaycompress    missingok    notifempty    create 0640 root root    sharedscripts    postrotate        /bin/kill -HUP $(cat /var/run/syslogd.pid 2>/dev/null) 2>/dev/null || true    endscript } EOF

核心思路:系统日志最多保留500MB,单文件不超过100MB,超过30天自动清理。业务日志用 logrotate 按天切割,保留7天压缩存档。

3.2 禁用无用服务

新装系统通常会启动一堆你用不到的服务。每个服务都是潜在的攻击面,也是资源消耗者:

# 禁用无用服务 for svc in avahi-daemon cups bluetooth postfix \           ModemManager accounts-daemon; do    systemctl stop $svc 2>/dev/null    systemctl disable $svc 2>/dev/null done # 关闭图形界面(服务器不需要) systemctl set-default multi-user.target # 关闭IPv6(如果内网不用) echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf sysctl -p

3.3 NTP 时间同步

时间不同步,认证会失败、日志对不上、分布式系统会出问题。这事儿必须配:

# 安装并配置 chrony yum install -y chrony 2>/dev/null || apt install -y chrony systemctl enable chronyd systemctl start chronyd # 或者用 ntpdate 快速同步一次 ntpdate ntp.aliyun.com

3.4 系统更新

新装系统的第一件事就是打补丁。安全漏洞的修复等不起:

# CentOS/RHEL yum update -y --exclude=kernel* yum clean all # Ubuntu/Debian apt update && apt upgrade -y apt autoremove -y apt clean

注意我加了 --exclude=kernel*。为什么?因为内核升级需要重启,我们先把用户空间的包更新完,内核单独处理,避免更新过程中服务中断。

四、常用软件自动化部署

每台服务器都应该有一套标准工具集。运维人员登上去,基本的排查工具得随手可用,不能临时去装。

# 系统工具 yum install -y vim wget curl net-tools lsof tree \    htop iotop iftop nmon ncdu bash-completion \    lrzsz bind-utils tcpdump strace sysstat \    lsof telnet rsync unzip bzip2 xz psmisc 2>/dev/null # 或者 Ubuntu/Debian apt install -y vim wget curl net-tools lsof tree \    htop iotop iftop nmon ncdu bash-completion \    lrzsz dnsutils tcpdump strace sysstat \    telnet rsync unzip bzip2 xz psmisc -y

几个常用工具说一下用途:

htop:比 top 好看100倍,进程树、CPU/内存柱状图一目了然

iftop:实时网络流量监控,哪个 IP 占带宽一目了然

iotop:IO 占用排行,排查磁盘瓶颈必备

ncdu:交互式磁盘占用分析,比 du -sh 好用太多

strace:系统调用追踪,进程卡住、报错时用它跟踪到底

tcpdump:抓包分析,网络问题的终极武器

4.1 配置 Vim

默认的 Vim 配置很难用,花一分钟调一下,编辑效率高不少:

cat > /etc/vimrc.local << 'EOF' set number set tabstop=4 set shiftwidth=4 set expandtab set autoindent set smartindent set ruler set showmode set showcmd set hlsearch set incsearch set ignorecase set smartcase syntax on EOF # 让所有用户的 vim 加载这个配置 echo 'source /etc/vimrc.local' >> /etc/vimrc

4.2 配置 bash 增强

让终端用起来更舒服:

cat >> /etc/profile.d/custom.sh << 'EOF' # 彩色 ls alias ls='ls --color=auto' alias ll='ls -lh' alias la='ls -lha' # 常用快捷 alias grep='grep --color=auto' alias df='df -h' alias du='du -h' alias free='free -h' alias netstat='netstat -tlnp' # 中文支持 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 # 退出时清屏(防止敏感信息残留) # trap 'history -w' EXIT EOF

4.3 安装 Docker(可选)

现在的服务器,不装 Docker 都不好意思说自己是运维。当然,不是所有场景都需要,但装上总没错:

# 一键安装 Docker curl -fsSL https://get.docker.com | sh -s docker --mirror Aliyun # 配置 Docker 镜像加速 mkdir -p /etc/docker cat > /etc/docker/daemon.json << 'EOF' {  "registry-mirrors": [    "https://mirror.baidubce.com",    "https://docker.1ms.run"  ],  "log-driver": "json-file",  "log-opts": {    "max-size": "50m",    "max-file": "3"  },  "storage-driver": "overlay2",  "live-restore": true } EOF systemctl enable docker systemctl start docker # 添加当前用户到 docker 组 usermod -aG docker admin

五、完整初始化脚本

把上面所有操作整合到一个脚本里,新服务器到手,传上去跑一遍就完事。脚本自动识别发行版,不用手动切换命令:

#!/bin/bash # ============================================ # Linux 服务器初始化脚本 v2.0 # 适用于: CentOS/RHEL 7+, Ubuntu 20.04+, Debian 11+ # 用法: bash init_server.sh # ============================================ set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' info()  { echo -e "${GREEN}[+] $1${NC}"; } warn()  { echo -e "${YELLOW}[!] $1${NC}"; } error() { echo -e "${RED}[-] $1${NC}"; exit 1; } # 检测发行版 if [ -f /etc/redhat-release ]; then    OS="centos" elif [ -f /etc/debian_version ]; then    OS="debian" else    error "不支持的系统" fi info "检测到系统: $OS" # 检查 root 权限 if [ "$(id -u)" -ne 0 ]; then    error "请使用 root 权限运行此脚本" fi # ---- 1. SSH加固 ---- info "正在加固 SSH 配置..." cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^#\?Port 22/Port 2222/' /etc/ssh/sshd_config sed -i 's/^#\?PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sed -i 's/^#\?PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sed -i 's/^#\?X11Forwarding yes/X11Forwarding no/' /etc/ssh/sshd_config sed -i 's/^#\?MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config echo 'PermitEmptyPasswords no' >> /etc/ssh/sshd_config # ---- 2. 创建管理用户 ---- info "创建管理用户..." if ! id admin &>/dev/null; then    useradd -m -s /bin/bash admin    echo "请为 admin 用户设置密码:"    passwd admin    if [ "$OS" = "centos" ]; then        usermod -aG wheel admin    else        usermod -aG sudo admin    fi    echo 'admin ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/admin    chmod 440 /etc/sudoers.d/admin fi # ---- 3. 防火墙 ---- info "配置防火墙..." if [ "$OS" = "centos" ]; then    systemctl enable firewalld    systemctl start firewalld    firewall-cmd --permanent --remove-service=ssh    firewall-cmd --permanent --add-port=2222/tcp    firewall-cmd --permanent --add-service=http    firewall-cmd --permanent --add-service=https    firewall-cmd --reload else    apt install -y ufw    ufw default deny incoming    ufw allow 2222/tcp    ufw allow 80/tcp    ufw allow 443/tcp    ufw --force enable fi # ---- 4. 内核调优 ---- info "优化内核参数..." cat >> /etc/sysctl.conf << 'SYSCTL' net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 2048 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_fastopen = 3 net.ipv4.ip_local_port_range = 1024 65535 vm.swappiness = 10 vm.overcommit_memory = 1 fs.file-max = 1048576 kernel.dmesg_restrict = 1 kernel.yama.ptrace_scope = 1 SYSCTL sysctl -p # 文件描述符限制 cat >> /etc/security/limits.conf << 'LIMITS' *    soft    nofile    65535 *    hard    nofile    65535 *    soft    nproc     65535 *    hard    nproc     65535 LIMITS # ---- 5. 日志管理 ---- info "配置日志管理..." mkdir -p /etc/systemd/journald.conf.d cat > /etc/systemd/journald.conf.d/limit.conf << 'JOURNAL' [Journal] SystemMaxUse=500M SystemMaxFileSize=100M MaxRetentionSec=30day ForwardToSyslog=no JOURNAL systemctl restart systemd-journald # ---- 6. 时间同步 ---- info "配置时间同步..." if [ "$OS" = "centos" ]; then    yum install -y chrony    systemctl enable chronyd    systemctl start chronyd else    apt install -y chrony    systemctl enable chrony    systemctl start chrony fi # ---- 7. 安装常用工具 ---- info "安装常用工具..." if [ "$OS" = "centos" ]; then    yum install -y epel-release    yum install -y vim wget curl net-tools lsof tree \        htop iotop iftop nmon ncdu bash-completion \        lrzsz bind-utils tcpdump strace sysstat \        rsync unzip bzip2 xz psmisc fail2ban else    apt install -y vim wget curl net-tools lsof tree \        htop iotop iftop nmon ncdu bash-completion \        lrzsz dnsutils tcpdump strace sysstat \        rsync unzip bzip2 xz psmisc fail2ban fi # ---- 8. 禁用无用服务 ---- info "禁用无用服务..." for svc in avahi-daemon cups bluetooth; do    systemctl stop $svc 2>/dev/null    systemctl disable $svc 2>/dev/null done systemctl set-default multi-user.target # ---- 9. Vim配置 ---- info "配置 Vim..." cat > /etc/vimrc.local << 'VIM' set number set tabstop=4 set shiftwidth=4 set expandtab set autoindent set hlsearch set incsearch syntax on VIM grep -q "vimrc.local" /etc/vimrc 2>/dev/null || echo 'source /etc/vimrc.local' >> /etc/vimrc # ---- 10. 系统更新 ---- info "正在更新系统..." if [ "$OS" = "centos" ]; then    yum update -y --exclude=kernel*    yum clean all else    apt update && apt upgrade -y    apt autoremove -y    apt clean fi info "==========================================" info "服务器初始化完成!" info "请执行以下操作:" info "1. 测试密钥登录: ssh -p 2222 admin@IP" info "2. 确认密钥登录正常后重启: reboot" info "3. 重启后验证服务状态" info "=========================================="

六、验证清单:跑完脚本之后做什么

脚本跑完不是结束,验证才是关键。以下清单建议逐一过一遍:

SSH验证:新开一个终端窗口,用密钥 + 2222 端口登录 admin 用户,确认能正常进入。这一步必须在关闭当前root会话之前完成!

防火墙验证firewall-cmd --list-allufw status,确认端口规则正确

内核参数验证sysctl -a | grep somaxconn 确认值已生效

fail2ban验证fail2ban-client status sshd

时间同步验证chronyc tracking

服务验证systemctl list-units --type=service --state=running 查看运行中的服务

磁盘验证df -h 确认磁盘正常

重启验证reboot 之后确认所有配置仍然生效(尤其是 sysctl 和 limits.conf 是否持久化)

总结一下

系统初始化这事儿,说白了就是把"毛坯房"变成"精装房"。安全加固是门锁和防盗窗,内核调优是水电改造,常用工具是家具家电。一套脚本跑完,新服务器直接达到生产标准,不用每次手动折腾。

这套脚本在我手里迭代了好几个版本,每台新机器都用它。最开始是几行命令,后来发现漏了日志管理,补上;又发现 fail2ban 没装,再加;内核参数也是踩过坑才调到最优。现在这套算是比较完整了,直接拿去用就行。

当然,不同业务场景可能还需要额外调整。比如跑数据库的机器,IO 调度器和内存参数要再细调;跑容器的机器,cgroup 和网络配置要额外关注。这些咱们后面慢慢聊。

下期预告: 系统初始化搞定了,下一篇咱们来讲讲——如何搭建一套完整的监控告警体系。Prometheus + Grafana + Alertmanager,从安装到配置到自定义告警规则,让你的服务器永远处在你的掌控之中。

0

评论 (0)

取消