我尝试在简单的密码文件中替换密码。新密码是垃圾密码,随机生成。
例如,这里是一个带有root帐户的影子文件。
root:igXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX+udyyyyyyyyyyyySgY=:10933:0:99999:7:::
我有以下表达式,其中4个尝试中的3个。
在第四次尝试时,我收到此错误" sed:替换表达式中的错误选项"。
另一次,它运作得很好。密码将替换为随机生成的字符串。
sed -i "/root/ s/ *:[^:]*:/:"$(openssl rand -base64 32)":/ " shadow
有人可以帮忙解释一下这个问题吗?
谢谢, 泰
答案 0 :(得分:2)
您生成的密码可能包含对sed
表达式具有魔力的字符。稍微好一些的方法是:
$ password=$(openssl rand -base64 32)
$ awk -F: -v OFS=: -v p="$password" '$1=="root"{$2=p}1' /etc/shadow
由于大多数awk
实现没有就地功能,您需要写入临时文件并替换/etc/shadow
(但这可能更安全)或使用方便的{{3} }实用程序是moreutils
的一部分。
答案 1 :(得分:1)
使用其他控制字符,因为/
也可能出现在密码字段中。
sed -i "/root/s^A *:[^:]*:^A:"$(openssl rand -base64 32)":^A" shadow
这里的分隔符是^A
(ctrl-A
- 使用 ctrl V A 键一起输入)