我已经为每台机器自动更改了近2000台主机的密码。我写了下面的脚本。
#!/bin/bash
while read line
do
ip=`cat /root/file | awk ' { print $1 } '`
owner=`cat /root/file | awk ' { print $2 } '`
function randpass() {
[ "$2" == "13" ] && CHAR="[:alnum:]" || CHAR="[:graph:]"
cat /dev/urandom | tr -cd "$CHAR" | head -c 8
echo
}
newpass=`randpass`
ssh $ip "mkdir -p /home/dev/.vnc"
ssh $ip "echo $newpass | vncpasswd -f > /home/dev/.vnc/passwd"
ssh $ip "chown -R dev:dev /home/dev/.vnc"
ssh $ip "chmod 0600 /home/dev/.vnc/passwd"
ssh $ip "echo "$newpass" | passwd --stdin dev"
#ssh $ip "echo -e "dev:$newpass" | chpasswd"
echo -e "$ip:$newpass:$owner" >> `date +"%d-%m-%y"`
done < /root/file
它将输出低于文件:
10.10.10.100:password1:bob1
10.10.10.101:password2:bob2
10.10.10.102:password3:bob3
10.10.10.104:password5:bob1
10.10.10.102:password4:bob3
10.10.10.108:password8:bob1
我需要添加其他脚本请帮忙
从上面的文件输出我需要生成如下文件:
文件名bob1(这是用户名):
10.10.10.108:password8
10.10.10.104:password5
10.10.10.100:password1
文件名bob2:
10.10.10.101:password2
文件名bob3:
10.10.10.102:password3
10.10.10.102:password4
注意:用户名可能会更改并添加更多用户名
答案 0 :(得分:1)
使用AWK:
awk -F: -vOFS=: '{ a = $NF; NF--; print > a }' file
该命令将输入和输出field separators设置为:
。该脚本将最后一个字段$NF
保存到a
变量中,减少字段数,并将其余字段打印到文件名等于a
的文件中,方法是output redirection(>
)。
注意,使用冒号作为字段分隔符是可靠的,因为我们只得到最后一个字段,最后一个字段是不允许冒号字符的用户名。