diff --git a/README.md b/README.md index e7d4e97..5a84ea4 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,62 @@ -# Linux SSH 密钥与安全一键配置工具 +# 🔐 SSH Key & Security Installer -一个轻量、高效且安全的 Linux SSH 运维脚本。支持一键导入/生成 SSH 密钥、更改服务端口、禁用密码登录以及公钥精准可视化管理。 +一键搞定 Linux 服务器的 SSH 密钥配置、端口修改和密码登录禁用。 +专为云服务器初始化、VPS 安全加固和自动化运维设计,兼容主流 Linux 发行版。 -适用于云服务器初始化、VPS 密钥管理及安全加固。 +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Bash](https://img.shields.io/badge/Bash-4.0+-green.svg)](https://www.gnu.org/software/bash/) +[![Platform](https://img.shields.io/badge/platform-Linux-blue.svg)](https://www.linux.org) --- -## ✨ 核心特性 +## 📦 功能特性 -- 🔑 **灵活的密钥管理** - - **GitHub 一键拉取**:直接输入 GitHub 用户名即可批量导入公钥。 - - **干净生成 ED25519**:本地快速生成新密钥对,自动剔除主机名/邮箱等尾部标识(无痕安全)。 - - **多源导入**:支持自定义 URL 拉取与本地文件导入。 - - **可视化表格管理**:直观展示已存公钥的添加时间、类型与备注来源,支持按序号单条精准删除或一键清空。 +- **一键导入 SSH 公钥** + - 从 GitHub 拉取(输入用户名即可) + - 从自定义 URL 导入 + - 从本地文件导入 + - 支持覆盖模式(`-o`) -- 🛡️ **安全防护与加固** - - **一键开关密码登录**:轻松开启或彻底禁用密码登录(同步禁用 `ChallengeResponseAuthentication` 和 `KbdInteractiveAuthentication`)。 - - **修改 SSH 端口**:支持 1024-65535 自定义端口,并**自动放行 UFW / Firewalld / SELinux** 相应规则。 - - **安全防锁死保护**: - - 在应用任何配置前强制进行 `sshd -t` 语法检查。 - - 智能检测当前 SSH 远程会话并弹出预警提示。 - - 自动处理 Debian/Ubuntu 系统下 `systemd ssh.socket` 导致的服务重启失效问题。 +- **在服务器上安全生成 ED25519 密钥对** + - 无痕生成(`-C ""` 清除后缀标识) + - 自动将公钥写入 `authorized_keys` + - 生成后私钥直接显示在终端,供本地保存(或通过 SFTP 下载) -- ⚡ **全系统兼容与 CLI 支持** - - 自动检测并安装缺失依赖(`curl`, `ssh-keygen`, `gawk`)。 - - 完美兼容主流 Linux 发行版(Debian, Ubuntu, CentOS, RHEL, Rocky Linux, AlmaLinux, Alpine Linux 等)。 - - 提供 CLI 命令行参数,方便集成至自动化脚本或 Cloud-init。 +- **交互式公钥可视化管理** + - 列表展示所有已存公钥(含添加时间、密钥类型、来源备注) + - 支持按序号删除单条公钥 + - 支持一键清空所有公钥 + +- **安全加固** + - 一键禁用密码登录(同时关闭 `ChallengeResponseAuthentication` 和 `KbdInteractiveAuthentication`) + - 修改 SSH 端口,并自动放行 `UFW` / `Firewalld` / `SELinux` + - 修改前自动执行 `sshd -t` 语法检查,防止配置错误导致断连 + - 智能检测远程会话,操作前给出安全提示 + +- **全平台兼容** + - 支持 `systemd`(Debian/Ubuntu/CentOS/RHEL)和 `OpenRC`(Alpine) + - 自动安装依赖(`curl`, `ssh-keygen`, `gawk`) + +- **命令行无人值守模式** + - 支持通过参数快速完成配置,便于集成到 `cloud-init` 或自动化脚本 --- -## 🚀 一键执行命令 +## 🚀 快速开始 -在终端复制并粘贴以下代码,即可自动下载并启动交互菜单: +在终端中执行以下命令,即可下载并启动交互式菜单: ```bash bash <(curl -fsSL https://raw.githubusercontent.com/BeacherZ/key.sh/main/key.sh) - ``` --- -## 🛠️ CLI 无人值守参数 +## 🖥️ 交互式菜单使用 -支持在自动化脚本中通过命令行参数快速配置: - -| 参数 | 格式 / 示例 | 说明 | -| --- | --- | --- | -| `-g` | `-g ` | 从 GitHub 拉取公钥并启用密钥登录 | -| `-u` | `-u ` | 从指定自定义 URL 拉取公钥并写入 | -| `-f` | `-f <文件路径>` | 从本地公钥文件导入 | -| `-p` | `-p <端口号>` | 修改 SSH 服务端口(如 `-p 2222`) | -| `-d` | `-d` | 禁用 SSH 密码登录(纯密钥模式) | -| `-o` | `-o` | **覆盖模式**(结合 `-g/-u/-f` 使用,导入前先清空旧公钥) | - -### CLI 调用示例 - -```bash -# 示例 1: 从 GitHub 拉取公钥并禁用密码登录 -bash <(curl -fsSL https://raw.githubusercontent.com/BeacherZ/key.sh/main/key.sh) -g "你的GitHub用户名" -d - -# 示例 2: 清空原有公钥并覆盖导入,同时修改 SSH 端口为 22222 -bash <(curl -fsSL https://raw.githubusercontent.com/BeacherZ/key.sh/main/key.sh) -o -g "你的GitHub用户名" -p 22222 +运行脚本后会显示当前 SSH 状态面板,并提供以下功能选项: ``` - ---- - -## 🖥️ 菜单预览 - -```plain ============================================================ SSH 密钥安全配置工具 ============================================================ @@ -84,17 +72,88 @@ bash <(curl -fsSL https://raw.githubusercontent.com/BeacherZ/key.sh/main/key.sh) 4. 公钥管理 0. 退出脚本 ============================================================ +``` +### 选项说明 + +| 选项 | 功能 | +|------|------| +| `1` | 添加 SSH 密钥(支持 GitHub / 本地生成 / 自定义 URL) | +| `2` | 切换密码登录状态(启用或禁用) | +| `3` | 修改 SSH 服务端口(自动放行防火墙) | +| `4` | 管理已存公钥(查看、删除单条、清空全部) | +| `0` | 退出脚本 | + +--- + +## ⚙️ CLI 命令行参数(无人值守) + +适用于自动化脚本或 `cloud-init` 初始化。所有参数可组合使用。 + +| 参数 | 格式 | 说明 | +|------|------|------| +| `-g` | `-g ` | 从 GitHub 拉取该用户的公钥并启用密钥登录 | +| `-u` | `-u ` | 从指定 URL 下载公钥并导入 | +| `-f` | `-f <文件路径>` | 从本地文件导入公钥 | +| `-p` | `-p <端口号>` | 修改 SSH 端口为指定值(需在 1024-65535 之间) | +| `-d` | `-d` | 禁用密码登录(纯密钥模式) | +| `-o` | `-o` | **覆盖模式**(与 `-g/-u/-f` 配合使用,导入前清空已有公钥) | + +### CLI 使用示例 + +```bash +# 从 GitHub 拉取公钥并禁用密码登录 +bash <(curl -fsSL https://raw.githubusercontent.com/BeacherZ/key.sh/main/key.sh) -g "your_username" -d + +# 清空原有公钥,从 GitHub 重新导入,并修改端口为 22222 +bash <(curl -fsSL https://raw.githubusercontent.com/BeacherZ/key.sh/main/key.sh) -o -g "your_username" -p 22222 + +# 从自定义 URL 导入公钥(覆盖模式) +bash <(curl -fsSL https://raw.githubusercontent.com/BeacherZ/key.sh/main/key.sh) -o -u "https://example.com/mykey.pub" + +# 仅修改 SSH 端口为 2222 +bash <(curl -fsSL https://raw.githubusercontent.com/BeacherZ/key.sh/main/key.sh) -p 2222 ``` --- -## ⚠️ 注意事项 +## 🔒 安全提示 -1. **测试连接再关闭窗口**:修改 SSH 端口或禁用密码登录后,**请勿立即关闭当前 SSH 终端**。请新建一个终端窗口测试能否顺利连接新端口/密钥登录。 -2. **云服务器安全组/防火墙**:脚本会自动放行本机防火墙(UFW/Firewalld),但如果使用的是阿里云、腾讯云、AWS 等云厂商 VPS,请务必前往**厂商后台的安全组/防火墙**中放行相应的新端口。 +- **始终先测试再关闭会话** + 修改端口或禁用密码登录后,**请勿立即关闭当前 SSH 窗口**。应新建一个终端会话,使用新端口/密钥尝试登录,确认成功后再退出旧会话,避免被锁在服务器外。 +- **云服务商安全组** + 脚本会自动放行系统防火墙(UFW/Firewalld),但如果您使用阿里云、腾讯云、AWS 等云厂商,还需在 **厂商控制台的安全组/防火墙** 中放行您修改后的端口。 +- **私钥保护** + 使用脚本生成的私钥(`PrivateKey.pem`)请务必妥善保存,切勿泄露。建议下载到本地后删除服务器上的临时副本。 +--- +## 🖥️ 兼容性 +| 发行版 | 支持情况 | +|--------|----------| +| Debian / Ubuntu | ✅ 完美支持 | +| CentOS / RHEL / Rocky / AlmaLinux | ✅ 完美支持 | +| Alpine Linux | ✅ 完美支持(OpenRC) | +| 其他 systemd 发行版 | ✅ 基本支持 | + +脚本会自动检测系统并适配相应的服务管理命令。 + +--- + +## 📥 依赖与安装 + +脚本会**自动安装**所需依赖(如果缺失): +- `curl`:用于网络请求 +- `openssh-client` / `openssh-clients`:提供 `ssh-keygen` +- `gawk`:用于文本处理 + +您也可以手动安装这些工具,但脚本已内置自动安装逻辑。 + +--- + +## 🤝 贡献与反馈 + +欢迎提交 Issue 或 Pull Request。如果您有任何建议或发现 Bug,请通过 GitHub 仓库反馈。