測試環境用了一臺debian一臺centos
若服務器數量很多可以在ssh_config 下面增加一行 StrictHostKeyChecking no 跳過密鑰的驗證,不用每次都輸入yes/no
debian的環境下請用完整路徑執行/bin/bash +x sshnewpass.sh
#!bin/bash#新建一個server.txt將服務器的賬號密碼寫進去#文本格式: 172.16.81.75|root|yuan|22ip=(`grep "." server.txt |cut -d "|" -f1`)user=(`grep "." server.txt |cut -d "|" -f2`)port=(`grep "." server.txt |cut -d "|" -f4`)passwd=(`grep "." server.txt |cut -d "|" -f3`)#newpass=`date +%s |sha256sum |base64 |head -c 32 ;echo` #先用123456測試,能成功再使用#newpass="123456"for (( i = 0; i < 3; i++ )); do newpass=`date +%s |sha256sum |base64 |head -c 32 ;echo` echo "${ip[i]} ${user[i]} ${port[i]} ${passwd[i]}" sshpass -p "${passwd[i]}" ssh -p ${port[i]} ${user[i]}@${ip[i]} "echo ${user[i]}:$newpass | chpasswd"# sshpass -p "${passwd[i]}" ssh -p ${port[i]} ${user[i]}@${ip[i]} "ls" #測試是否連接成功 if [[ $? == 0 ]]; then echo "${ip[i]} 原密碼:${passwd[i]} 新密碼:$newpass" >>newhost.txt echo "${ip[i]} 原密碼:${passwd[i]} 新密碼:$newpass" else echo "更新密碼失敗請檢查主機密碼是否對應,端口是否正確,sshpasss是否可用" fidone備注:幾種踩過的坑,感謝開發同事重新刷新了世界觀#!bin/bash #新建一個文本將服務器的賬號密碼寫進去#文本格式: 172.16.81.75|root|yuan|22ip=`grep "." server.txt |cut -d "|" -f1`user=`grep "." server.txt |cut -d "|" -f2`port=`grep "." server.txt |cut -d "|" -f4`passwd=`grep "." server.txt |cut -d "|" -f3`#newpass=`date | base64` #先用123456測試,能成功再使用newpass="123456"a=($ip $user $port $passwd $newpass)for i in ${a}; do #sshpass -p "$passwd" ssh -p $port $user@$x "echo '$newpass' | passwd root --stdin" centos使用 # sshpass -p "${a[3]}" ssh -p ${a[2]} ${a[1]}@${a[0]} "echo ${a[1]}:${a[4]} | chpasswd " echo " 主機 ${a[0]} 端口 ${a[2]} 用戶 ${a[1]} 密碼 ${a[3] " sshpass -p "${a[3]}" ssh -p ${a[2]} ${a[1]}@${a[0]} "ls" if [ $? == 0 ]; then echo "${a[0]} 原密碼:${a[3]} 新密碼:${a[4]}" echo "${a[0]} 原密碼:${a[3]} 新密碼:${a[4]}" >>newhost.txt else echo "更新密碼失敗請檢查主機密碼是否對應,端口是否正確,sshpasss是否可用" fidone#sshpass -p "$passwd" ssh root@$ip "ls"$i=0while [[ $i < ${#..} ]]; do ${ip[$i]} ${user[$i]} $i++donefor (( i = 0; i < 10; i++ )); do #statementsdone
新聞熱點
疑難解答