From f2e9615fd0cdd3aa974c43635d22b4e33799ccc9 Mon Sep 17 00:00:00 2001 From: xzx3344521 Date: Sun, 16 Nov 2025 15:47:43 +0800 Subject: [PATCH] =?UTF-8?q?Update=20SSH=E5=AF=86=E9=92=A5=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E5=8F=8A=E5=AE=89=E5=85=A8=E5=8A=A0=E5=9B=BA=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SSH密钥部署及安全加固脚本 | 233 ++++---------------------------------- 1 file changed, 23 insertions(+), 210 deletions(-) diff --git a/SSH密钥部署及安全加固脚本 b/SSH密钥部署及安全加固脚本 index 777a5f9..7fa6d1e 100644 --- a/SSH密钥部署及安全加固脚本 +++ b/SSH密钥部署及安全加固脚本 @@ -1,218 +1,31 @@ #!/bin/bash -# 完全自动化SSH密钥部署脚本 -# 功能:一键生成通用SSH密钥并自动部署到当前服务器 -# 特性: -# 1. 完全自动化,无需任何交互 -# 2. 生成通用密钥对,固定密码88888888 -# 3. 自动将公钥部署到当前服务器的authorized_keys -# 4. 自动加固SSH配置(禁用密码登录) -# 5. 生成的密钥可在多台服务器上通用 +# 固定密码SSH配置脚本 +# 所有服务器将使用相同的预定义32位密码: J7#p9X2mY4zR6v8S1qN3cF5hT0dW8eB2 # 配置参数 -KEY_DIR="$HOME/.ssh" -KEY_NAME="universal_ssh_key" -KEY_PASS="88888888" -KEY_TYPE="ed25519" -SSH_PORT="22" -BACKUP_DIR="/tmp/ssh_setup_backup_$(date +%s)" +FIXED_PASSWORD="J7#p9X2mY4zR6v8S1qN3cF5hT0dW8eB2" -# 颜色定义 -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' - -# 日志函数 -log() { - echo -e "$(date '+%Y-%m-%d %H:%M:%S') $1" +# 设置root密码 +echo "正在设置固定密码..." +echo "root:${FIXED_PASSWORD}" | chpasswd || { + echo -e "\033[31m密码设置失败\033[0m" + exit 1 } -# 安装必要依赖 -install_deps() { - log "${YELLOW}检查系统依赖...${NC}" - local pkgs=(ssh-keygen ssh sshpass expect) - local missing=() - - for pkg in "${pkgs[@]}"; do - if ! command -v "$pkg" &>/dev/null; then - missing+=("$pkg") - fi - done +# 配置SSH允许密码登录 +echo "配置SSH密码登录..." +sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config - if [ ${#missing[@]} -gt 0 ]; then - log "${YELLOW}正在安装依赖: ${missing[*]}${NC}" - if command -v apt-get &>/dev/null; then - apt-get update -qq && apt-get install -y -qq "${missing[@]}" >/dev/null || { - log "${RED}依赖安装失败${NC}" - return 1 - } - elif command -v yum &>/dev/null; then - yum install -y -q "${missing[@]}" >/dev/null || { - log "${RED}依赖安装失败${NC}" - return 1 - } - else - log "${RED}不支持的包管理器${NC}" - return 1 - fi - fi - return 0 -} - -# 生成SSH密钥 -generate_key() { - log "${YELLOW}正在生成SSH密钥...${NC}" - - mkdir -p "$KEY_DIR" || { - log "${RED}无法创建SSH目录${NC}" - return 1 - } - - # 生成新密钥 - ssh-keygen -t "$KEY_TYPE" -C "universal_auto_key" -N "$KEY_PASS" -f "${KEY_DIR}/${KEY_NAME}" -q || { - log "${RED}密钥生成失败${NC}" - return 1 - } - - # 设置正确权限 - chmod 700 "$KEY_DIR" - chmod 600 "${KEY_DIR}/${KEY_NAME}" - chmod 644 "${KEY_DIR}/${KEY_NAME}.pub" - - log "${GREEN}SSH密钥生成成功${NC}" - return 0 -} - -# 部署公钥到本机 -deploy_key_locally() { - log "${YELLOW}正在部署公钥到本机...${NC}" - - mkdir -p "$BACKUP_DIR" - - # 备份原密钥 - if [ -f "${KEY_DIR}/authorized_keys" ]; then - cp "${KEY_DIR}/authorized_keys" "${BACKUP_DIR}/authorized_keys.bak" || { - log "${RED}authorized_keys备份失败${NC}" - } - fi - - # 添加新公钥 - if [ -f "${KEY_DIR}/${KEY_NAME}.pub" ]; then - mkdir -p "${KEY_DIR}" - touch "${KEY_DIR}/authorized_keys" - chmod 600 "${KEY_DIR}/authorized_keys" - - # 检查是否已存在相同公钥 - if ! grep -q "$(cat "${KEY_DIR}/${KEY_NAME}.pub")" "${KEY_DIR}/authorized_keys"; then - cat "${KEY_DIR}/${KEY_NAME}.pub" >> "${KEY_DIR}/authorized_keys" || { - log "${RED}公钥添加失败${NC}" - return 1 - } - log "${GREEN}公钥已添加到本机${NC}" - else - log "${YELLOW}相同公钥已存在,跳过添加${NC}" - fi - else - log "${RED}公钥文件不存在${NC}" - return 1 - fi - - return 0 -} - -# 安全加固SSH配置 -secure_ssh() { - log "${YELLOW}正在加固SSH配置...${NC}" - - # 备份原配置 - cp /etc/ssh/sshd_config "${BACKUP_DIR}/sshd_config.bak" || { - log "${RED}sshd_config备份失败${NC}" - return 1 - } - - # 应用安全配置 - sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config - sed -i 's/^#*PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config - sed -i 's/^#*PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config - - # 重新加载SSH服务 - if systemctl reload sshd >/dev/null 2>&1 || service sshd reload >/dev/null 2>&1; then - log "${GREEN}SSH配置已更新并重载${NC}" - else - log "${RED}SSH服务重载失败,正在回滚...${NC}" - cp "${BACKUP_DIR}/sshd_config.bak" /etc/ssh/sshd_config - return 1 - fi - - return 0 -} - -# 验证部署 -verify_deployment() { - log "${YELLOW}验证密钥登录...${NC}" - - # 测试本地密钥登录 - if ssh -i "${KEY_DIR}/${KEY_NAME}" -o PasswordAuthentication=no -o StrictHostKeyChecking=no -o ConnectTimeout=5 localhost "echo 连接测试成功" >/dev/null 2>&1; then - log "${GREEN}密钥登录验证成功${NC}" - return 0 - else - log "${RED}密钥登录验证失败${NC}" - return 1 - fi -} - -# 显示成功信息 -show_success() { - echo -e "\n${GREEN}✔ SSH密钥部署成功!${NC}" - echo -e "==============================" - echo -e "${YELLOW}重要信息:${NC}" - echo -e "密钥路径: ${KEY_DIR}/${KEY_NAME}" - echo -e "密钥密码: ${KEY_PASS}" - echo -e "\n${YELLOW}使用说明:${NC}" - echo -e "1. 此密钥可在其他服务器上使用相同方法部署" - echo -e "2. 连接到其他服务器时使用:" - echo -e " ssh -i ${KEY_DIR}/${KEY_NAME} 用户名@服务器IP" - echo -e "3. 需要输入密钥密码时使用: ${KEY_PASS}" - echo -e "\n${RED}⚠ 请确保在其他服务器部署前先备份现有密钥${NC}" - echo -e "==============================\n" -} - -# 主函数 -main() { - # 安装依赖 - install_deps || { - log "${RED}依赖安装失败,退出脚本${NC}" - exit 1 - } - - # 生成密钥 - generate_key || { - log "${RED}密钥生成失败,退出脚本${NC}" - exit 1 - } - - # 部署到本机 - deploy_key_locally || { - log "${RED}本地部署失败,退出脚本${NC}" - exit 1 - } - - # 安全加固 - secure_ssh || { - log "${RED}SSH加固失败,退出脚本${NC}" - exit 1 - } - - # 验证部署 - verify_deployment || { - log "${RED}部署验证失败,退出脚本${NC}" - exit 1 - } - - # 显示成功信息 - show_success -} - -# 执行主函数 -main +# 重启SSH服务 +if systemctl restart sshd &>/dev/null || service sshd restart &>/dev/null; then + echo -e "\n\033[32m✔ 配置成功完成!\033[0m" + echo "==============================" + echo "用户名: root" + echo "固定密码: ${FIXED_PASSWORD}" + echo "==============================" +else + echo -e "\033[31mSSH服务重启失败\033[0m" + exit 1 +fi