You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量校验服务器配置文件与备份文件一致性的Bash脚本问题

解决Bash脚本遍历服务器与校验文件一致性的问题

问题根源分析

  • 遍历不全:大多是用for循环读取文件(会按空格/制表符分割行)而非while read;或是未过滤文件中的空白行、注释行。
  • 误判一致性:远程执行sha256sum时直接比较完整输出(包含文件名),而文件名/路径的显示差异会导致匹配失败;或是远程输出包含ssh欢迎信息等冗余内容,干扰哈希值提取。

修正后的完整脚本

#!/bin/bash

# 读取服务器列表,跳过空白行与注释行(以#开头)
while IFS= read -r server; do
    # 跳过无效条目
    [[ -z "$server" || "$server" =~ ^# ]] && continue

    echo "=== 正在处理服务器: $server ==="

    # 远程获取两个文件的sha256哈希值(仅提取哈希部分)
    hash_conf=$(ssh -q "$server" 'sha256sum /home/config.conf | awk "{print \$1}"')
    hash_bk=$(ssh -q "$server" 'sha256sum /home/config.conf-bk | awk "{print \$1}"')

    # 检查SSH连接是否成功
    if [ $? -ne 0 ]; then
        echo "ERROR: 无法连接到服务器 $server"
        continue
    fi

    # 对比哈希值判断一致性
    if [ "$hash_conf" = "$hash_bk" ]; then
        echo "INFO: $server 上的配置文件与备份完全一致"
    else
        echo "WARNING: $server 上的配置文件与备份不一致,开始执行恢复操作..."
        # 从备份覆盖原配置文件
        ssh -q "$server" 'cp /home/config.conf-bk /home/config.conf'
        # 验证恢复结果
        new_hash=$(ssh -q "$server" 'sha256sum /home/config.conf | awk "{print \$1}"')
        if [ "$new_hash" = "$hash_bk" ]; then
            echo "SUCCESS: $server 配置文件恢复完成"
        else
            echo "ERROR: $server 配置文件恢复失败,请手动检查"
        fi
    fi

done < file.txt

核心优化点说明

  • 可靠遍历服务器:用while IFS= read -r server读取文件,IFS=保留行内空格,-r禁止反斜杠转义;同时跳过空白行和注释行,避免无效连接尝试。
  • 精准哈希校验:远程执行sha256sum后用awk仅提取哈希值,彻底避免文件名/路径差异导致的误判;ssh -q关闭冗余输出,防止干扰哈希值提取。
  • 异常处理机制:检查SSH连接状态,及时标记无法连接的服务器;恢复操作后再次校验,确保恢复结果符合预期。
  • 可扩展恢复逻辑:若需要保留原损坏文件,可将恢复命令改为mv /home/config.conf /home/config.conf.err && cp /home/config.conf-bk /home/config.conf。

使用注意事项

  1. 确保执行脚本的用户对所有服务器拥有无密码SSH访问权限(可通过ssh-copy-id预先配置)。
  2. file.txt中每行填写一个服务器地址,支持带端口的格式(如user@server:2222)。
  3. 测试阶段可移除ssh -q参数,查看远程执行的详细输出,方便排查问题。

内容的提问来源于stack exchange,提问作者Saeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:33:18