我经常必须在新服务器上设置与旧服务器上相同的密码,我可以从阴影中手动简单地粘贴哈希,但我想学习自动执行此操作。
old machine A
new machine B
在新机器 B 上存在来自 A 的用户,但也存在 A 上不存在的其他用户(因此影子未排序,我们当然可以跳过它们)
有没有办法通过 sed/awk 来:
从机器 A 获取哈希,并替换新机器 B 上未设置 pwd 的现有用户。 (xxx:!:xxxx)
答案1
awk 'BEGIN{ OFS=FS=":" }
{
if (NR==FNR) {
pwd[$1]=$2
} else {
if ($2 ~ /^!/ && $1 in pwd) $2=pwd[$1]
print
}
}' shadowA shadowB
shadowA
当处理第一个文件时( NR==FNR
),将密码哈希保存在数组中pwd
,以用户名作为索引。
shadowB
当处理第二个文件( else
) 且第二个字段以 a !
(可以是!
或!!
)开头且用户名出现在密码数组 ( $1 in pwd
) 中时,则更新第二个字段的值。之后打印当前行shadowB
。