2016-12-16 17 views
0

我已經自動爲每個設備近2000臺主機更改密碼。我寫下了腳本。需要幫助的shell腳本過濾所有者機器列表

#!/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 

它genarates下方輸出到文件:

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

您可以在生成的文件使用'grep'。例如,你有'echo -e'$ ip:$ newpass:$ owner「>>'outputFile'' ....然後你可以做一些類似'outputFile | grep bob1> bob1.log'或類似的東西。 – Hackerman

+0

您可能需要編寫一個腳本在2000和主機更改密碼之前得到多一點的shell編程經驗,似乎有很多可以去錯的,如果你沒有得到的腳本絕對完美。 –

回答

1

使用AWK:

awk -F: -vOFS=: '{ a = $NF; NF--; print > a }' file 

的命令設置輸入和輸出field separators:。腳本將最後一個字段$NF保存爲a變量,遞減字段數,並通過output redirection>)將其餘字段打印到文件名等於a的文件。

注意,它是可靠的使用冒號作爲字段分隔符的工作,因爲我們得到的只是最後一個字段,最後一個字段是冒號不允許用戶名。

+0

謝謝魯斯蘭,它的工作我打算髮送郵件給它的用戶是可能的bob1是郵件ID和重定向bob1file是機器和密碼。我需要呼應的用戶名和用戶機帶密碼 – sagar

+0

@sagar,如果密碼不包含冒號,那麼你就可以訪問字段作爲'$ NF'(減量操作之後)。其實,你可以通過它們的數字來訪問冒號分隔的字段:'$ 1','$ 2','$ 3'等等。我從頭到尾統計了字段,因爲它更安全(我不知道密碼字段可能包含冒號,特別是)。因此,您可以打印所需的字段並將結果重定向至文件,例如'{a = $ NF; NF--;打印一個「@」$ 1「 - 」$ NF> a}' –

+0

我將更改爲字段分隔符中的空格,因爲創建的密碼是隨機的,它可能會創建冒號組成一個。或標籤是最好的選擇? – sagar