Skip to content

POSIX-compliant Linux server initialization & SSH hardening script. (Debian/Ubuntu/CentOS/Alpine) | Linux 服务器初始化与 SSH 安全加固脚本(一键配置密钥、端口、BBR)。

License

Notifications You must be signed in to change notification settings

247like/linux-ssh-init-sh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Linux 服务器初始化与 SSH 安全加固

Test Matrix POSIX Shell License Release Stars

中文文档 English


一个生产就绪、符合 POSIX 标准的 Shell 脚本,用于 Linux 服务器的一键初始化与 SSH 安全加固。

该脚本可自动完成 SSH 密钥配置修改端口创建用户开启 BBR 以及 系统更新,并完美兼容 Debian, Ubuntu, CentOS, RHEL 以及 Alpine Linux。

✨ 核心特性

  • 全平台兼容: 完美支持 Debian, Ubuntu, CentOS/RHEL, Alma/Rocky, 以及 Alpine Linux
  • POSIX 标准: 纯 /bin/sh 编写,无需安装 bash。在 dash (Debian) 和 ash (Alpine/Busybox) 上稳定运行。
  • 安全架构 (Fortress Pro):
    • 托管配置块: 使用 # BEGIN SERVER-INIT MANAGED BLOCK 头部插入配置,确保优先级最高,不受 Include 指令干扰。
    • 自动回滚 (Auto-Rollback): 运行时若发生 SSHD 校验失败、端口未监听或连接测试失败,自动还原系统状态。
    • 进程防杀 (Anti-Kill): 为 SSHD 服务添加 systemd override.conf,防止 OOM 误杀并配置自动重启。
    • 防失联死锁检测: 智能检测认证方式,防止出现“既禁用密码又未配好密钥”的死锁。
  • 自动化友好:
    • 支持 无头模式 (Headless),通过命令行参数实现零交互无人值守安装。
    • 审计与报告: 自动生成详细的操作审计日志与系统健康检查报告。

🚀 快速开始

请以 root 身份运行。

1. 交互式运行 (推荐)

curl -fsSL https://raw.githubusercontent.com/247like/linux-ssh-init-sh/main/init.sh -o init.sh && chmod +x init.sh && ./init.sh

2. 强制使用英文界面

./init.sh --lang=en

🤖 自动化部署 (无头模式)

适用于 CI/CD 或批量装机场景。使用命令行参数传递配置,配合 --yes 跳过确认。

全自动运行示例

(配置 Root 用户、随机端口、从 GitHub 拉取公钥、开启 BBR、更新系统、自动确认)

curl -fsSL https://raw.githubusercontent.com/247like/linux-ssh-init-sh/main/init.sh | sh -s -- \
    --user=root \
    --port=random \
    --key-gh=247like \
    --bbr \
    --update \
    --strict \
    --yes

半自动示例

(指定公钥来源,其他选项手动选择)

./init.sh --key-url=https://my-server.com/id_ed25519.pub

⚙️ 参数详解

脚本支持丰富的命令行参数来控制行为:

参数类别 参数 说明
基础控制 --lang=en 强制使用英文界面
--yes 自动确认:跳过脚本最后的 "确认执行?" 询问
--strict 严格模式:遇到任何错误立即退出 (详见下方)
--delay-restart 延迟重启:修改配置但不重启 SSH 服务 (适用于特殊环境)
用户与端口 --user=root 指定登录用户 (root 或普通用户名)
--port=22 保持默认 22 端口
--port=random 生成随机高位端口 (49152-65535)
--port=2222 指定具体端口号
密钥来源 --key-gh=username 从 GitHub 用户拉取公钥
--key-url=url 从指定 URL 下载公钥
--key-raw="ssh-..." 直接传递公钥内容字符串
系统选项 --update 开启系统软件包更新
--no-update 跳过系统更新
--bbr 开启 TCP BBR 拥塞控制
--no-bbr 不开启 BBR

⚙️ 普通模式 vs 严格模式

场景 普通模式 (默认) 严格模式 (--strict)
设计理念 "优先保命" (尽力而为) "优先合规" (零容忍)
公钥失败 若下载失败,脚本保留密码登录并警告。
👉 结果:服务器不安全,但能登录修补。
脚本立即报错退出,不修改任何配置。
👉 结果:部署中断,保持原样。
端口失败 若随机端口失败,回退使用 端口 22 脚本立即报错退出

📂 日志与审计

脚本执行后会生成以下重要文件,用于排查问题或审计合规:

  • 运行日志: /var/log/server-init.log (包含详细的 debug 信息)
  • 审计日志: /var/log/server-init-audit.log (记录关键操作 Action、时间戳及操作人)
  • 健康报告: /var/log/server-init-health.log (最终的系统配置状态快照)

🆘 灾难恢复与配置还原

脚本拥有两层安全机制:运行时自动回滚持久化备份恢复

如果在脚本执行完成后(显示 "DONE" 后)您无法连接服务器,请通过云服务商的 VNC / Console 控制台登录,并使用以下方法恢复。

方法 A:使用一键恢复脚本 (推荐)

脚本在修改前会自动创建备份,并生成恢复脚本。

  1. 找到最近的备份目录:
    ls -ld /var/backups/ssh-config/*
  2. 进入目录并运行恢复脚本:
    # 进入最新的备份目录 (例如 20250520_120000)
    cd /var/backups/ssh-config/<TIMESTAMP>/
    
    # 执行恢复
    sh restore.sh
    该脚本会自动覆盖 sshd_config 并尝试重启 SSH 服务。

方法 B:手动恢复

如果无法运行脚本,可手动复制文件:

# 1. 覆盖配置文件
cp /var/backups/ssh-config/<TIMESTAMP>/sshd_config /etc/ssh/sshd_config

# 2. 重启服务
systemctl restart sshd || service sshd restart

⚠️ 免责声明

本脚本会修改核心系统配置(SSH)。虽然脚本内置了多重安全检查和回滚机制,但请务必确保你拥有服务器的备用访问方式(如 VNC 控制台),以防网络波动或配置意外导致的连接中断。

📄 开源协议

本项目采用 MIT License 开源。


如果您觉得这个工具好用,请给一颗 ⭐ 星!

报告问题 · 功能建议

About

POSIX-compliant Linux server initialization & SSH hardening script. (Debian/Ubuntu/CentOS/Alpine) | Linux 服务器初始化与 SSH 安全加固脚本(一键配置密钥、端口、BBR)。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages