批量更新服务器,生成随机密码并记录 (重要,批量脚本示例)

本文介绍了一个用于批量更新服务器密码的Shell脚本。该脚本通过读取包含服务器IP地址、用户名、原始密码及端口号的文本文件,实现对多台服务器密码的安全更新,并记录更新结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试环境用了一台debian一台centos

若服务器数量很多可以在ssh_config 下面增加一行 StrictHostKeyChecking no  跳过密钥的验证,不用每次都输入yes/no

debian的环境下请用完整路径执行/bin/bash +x  sshnewpass.sh

#!bin/bash 
#新建一个server.txt将服务器的账号密码写进去
#文本格式:  172.16.81.75|root|yuan|22
ip=(`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是否可用"
	fi
done

备注:几种踩过的坑,感谢开发同事重新刷新了世界观


#!bin/bash  
#新建一个文本将服务器的账号密码写进去
#文本格式:  172.16.81.75|root|yuan|22
ip=`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是否可用"
	fi
done

#sshpass -p "$passwd" ssh root@$ip "ls"


$i=0
while [[ $i < ${#..} ]]; do
	${ip[$i]}    ${user[$i]}
	$i++
done

for (( i = 0; i < 10; i++ )); do
	#statements
done




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值