我已经为几乎 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
注意:用户名可能会更改并添加更多用户名
最佳答案
使用 AWK:
awk -F: -vOFS=: '{ a = $NF; NF--; print > a }' file
命令设置输入输出field separators到 :
。该脚本将最后一个字段 $NF
保存到 a
变量中,减少字段数,并将其余字段打印到文件名等于 值的文件中code>a
通过 output redirection (>
)。
请注意,使用冒号作为字段分隔符是可靠的,因为我们只获取最后一个字段,而最后一个字段是不允许使用冒号字符的用户名。
关于linux - 需要帮助 shell 脚本来过滤所有者机器列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41188679/