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

如何用Awk基于用户名匹配批量同步/etc/shadow的密码字段?

这问题我之前帮客户处理过类似的批量用户密码迁移场景,用awk就能完美解决,而且很容易集成到批量脚本里。下面是具体的步骤和方案:

核心解决方案(单台服务器)

首先一定要先备份/etc/shadow,这是操作敏感系统文件的铁律,避免失误导致用户无法登录:

cp /etc/shadow /etc/shadow.bak.$(date +%Y%m%d%H%M)

然后用这条awk命令完成密码字段的替换,它会读取shadow.sync里的用户名和密码哈希,匹配到/etc/shadow里的用户后替换第二列:

awk -F: 'NR==FNR {pass[$1]=$2; next} $1 in pass {$2=pass[$1]} 1' shadow.sync /etc/shadow > /tmp/new_shadow

命令解释:

  • -F::指定用冒号作为字段分隔符,适配shadow文件的格式
  • NR==FNR:仅在处理第一个文件(shadow.sync)时执行:把用户名($1)作为键,密码哈希($2)作为值存入关联数组pass,然后next跳过后续逻辑
  • 处理第二个文件(/etc/shadow)时,检查当前行的用户名是否在pass数组中,如果存在就把第二列替换为对应的密码哈希
  • 1:awk的简写语法,代表打印当前行(不管有没有修改,确保所有行都保留)

接下来验证生成的/tmp/new_shadow内容是否正确(比如检查行数是否和原文件一致,随机抽查几个用户的密码字段),确认无误后替换原文件并设置正确权限:

mv /tmp/new_shadow /etc/shadow
chmod 0400 /etc/shadow
chown root:root /etc/shadow

批量处理90台服务器的脚本化方案

把上面的逻辑封装成shell脚本,方便批量执行:

  1. 创建脚本文件sync_shadow.sh:
#!/bin/bash
set -e  # 遇到错误立即退出

# 备份原shadow文件
BACKUP_FILE="/etc/shadow.bak.$(date +%Y%m%d%H%M)"
echo "正在备份/etc/shadow到$BACKUP_FILE..."
cp /etc/shadow "$BACKUP_FILE"

# 生成新的shadow文件
echo "正在同步密码字段..."
awk -F: 'NR==FNR {pass[$1]=$2; next} $1 in pass {$2=pass[$1]} 1' /tmp/shadow.sync /etc/shadow > /tmp/new_shadow

# 验证文件完整性
if [ $(wc -l < /etc/shadow) -ne $(wc -l < /tmp/new_shadow) ]; then
    echo "错误:新文件行数与原文件不一致,终止操作"
    rm /tmp/new_shadow
    exit 1
fi

# 替换并修复权限
mv /tmp/new_shadow /etc/shadow
chmod 0400 /etc/shadow
chown root:root /etc/shadow

echo "密码同步完成!备份文件:$BACKUP_FILE"
  1. 批量部署执行(假设服务器列表存在servers.txt文件,每行一个服务器IP或主机名):
# 给脚本加执行权限
chmod +x sync_shadow.sh

# 循环处理每台服务器
for server in $(cat servers.txt); do
    echo "===== 处理服务器 $server ====="
    # 上传shadow.sync和脚本到服务器临时目录
    scp shadow.sync sync_shadow.sh root@$server:/tmp/
    # 远程执行脚本
    ssh root@$server "cd /tmp && ./sync_shadow.sh"
done

关键注意事项

  • 所有操作必须以root身份执行,因为/etc/shadow是root专属的敏感文件
  • 执行前务必在一台测试服务器上验证脚本逻辑,确保替换后的密码可以正常登录
  • shadow.sync文件包含用户密码哈希,传输和存储过程中要严格保密,避免泄露
  • 如果某台服务器上有shadow.sync里没有的用户,脚本会保留原shadow文件中的该用户行,不会做任何修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:50:24