shell expect自動化建立使用者,修改密碼,多臺機器一鍵免祕鑰登入
阿新 • • 發佈:2019-02-15
1.建立使用者–50臺機器上建立使用者,不可能手動去幹的。
- useradd.sh中的程式碼:
#!/bin/bash
user=cow
password=cow
useradd -d /home/$user $user
expect << EOF
spawn passwd $user
expect "New password:"
send "${password}\r"
expect "Retype new password:"
send "${password}\r"
expect eof;
EOF
- 執行該程式碼:
- 單臺機器上執行該指令碼那麼多臺機器呢?
- 還記得之前我們用過salt的這個工具麼?
1.將該指令碼傳到其他機器上。只是一條指令就可以了。
這樣就將該指令碼傳到所有的機器上了,*代表所有。
2.執行該指令碼。我們以s2這個機器為例,如果所有那麼也要用*表示
這裡就是所有機器上執行建立使用者並設定密碼,當然所有的機器上都要安裝expect否則就出現下面的錯誤:
2.修改建立使用者後的密碼:
- repasswd.sh中的 內容:
#!/bin/bash
USER=wyl2
NPASS=wylwyl2
expect << EOF
spawn passwd $USER
expect "New password:"
send "${NPASS}\r"
expect "Retype new password:"
send "${NPASS}\r"
expect eof;
EOF
執行該指令碼後的效果圖:
3.建立好使用者,則可能需要各個機器之間的免祕鑰登入:
- 該指令碼中的內容
#!/usr/bin/expect
set timeout -1
#修改配置內容,需要免密碼登入的使用者
set user ooo
set password ooo
#需要免密碼登入的機器
set ipmaster bgs-5p173-wangwenting
set ipslave2 bgs-5p174-wangwenting
set ipslave3 bgs-5p175-wangwenting
set path /home/$user
#建立祕鑰
spawn ssh-keygen -t rsa
expect {
#第一次需要輸入的enter鍵,exp_continue如果沒有捕獲到該資訊的時候就跳過這個行為,執行下一次的行為。
".ssh/id_rsa" {send "\r";exp_continue}
"Overwrite" {send "y\r";exp_continue}
"(empty for no passphrase):" {send "\r";exp_continue}
"Enter same passphrase again" {send "\r";exp_continue}
}
spawn ssh-copy-id -i $path/.ssh/id_rsa.pub $user@$ipmaster
expect {
"*yes/no*" { send "yes\r"; exp_continue}
"*password:" { send "$password\r" }
}
spawn ssh-copy-id -i $path/.ssh/id_rsa.pub $user@$ipslave2
expect {
"*yes/no*" { send "yes\r"; exp_continue}
"*password:" { send "$password\r" }
}
spawn ssh-copy-id -i $path/.ssh/id_rsa.pub $user@$ipslave3
expect {
"*yes/no*" { send "yes\r"; exp_continue}
"*password:" { send "$password\r" }
}
expect eof