测试环境用了一台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
新闻热点
疑难解答