目录
背景介绍
大厂的运维人员常常面临几千上万台服务器的运维,服务器一般有几个固定的密码。但是有时候会搞不清具体是哪个密码,十来个可能的密码需要一个个反复尝试非常苦恼。我本人前段时间所面临的问题,为此我写了以下的脚本完美解决了这个问题。
功能说明
1.从一个密码列表找出正确密码
2.通过试出来的密码对大批量服务器进行日常运维工作
脚本介绍
脚本依赖一个sshpass插件工具将密码作为参数传递,
pwds:常用密码列表
ips:要破解的ip列表
#!/bin/bash
function getPwd()
{
#列出所有可能的密码,用这些密码一个个去尝试登陆。如果登陆成功则证明密码正确,记录下此密码。
#另外如果原先设置了免密登录即使错误的密码也能登陆成功,因此需要设置第一个密码为错误密码来继续验证:abc
cat >pwds<<eof1
abc
passwd1
passwd2
eof1
while IFS= read -r ip
do
ssh-keyscan -H $ip >> ~/.ssh/known_hosts
echo "scanning $ip" >> scan.log
while IFS= read -r pwd
do
timeout 1s sshpass -p $pwd ssh $ip "exit" && echo -e "$ip\t$pwd" >> scan.log && break
done<pwds
done<ips
grep -v scanning scan.log >> pwds.txt
}
function changePwd()
{
sshpass -p $2 ssh -tt $1 << EOF
echo "appuer_pwd"|passwd --stdin appuser
echo "root_pwd"|passwd --stdin root
history -c
> /root/.bash_history
exit 0
EOF
}
getPwd
while IFS= read -r line
do
ip=`echo $line | awk -F ' ' '{print $1}'`
pw=`echo $line | awk -F ' ' '{print $2}'`
#changePW $ip $pw
echo -e "\n\n"
sshpass -p $2 ssh -tt $1 << EOF
chage -l root
chage -l imodule
history -c
> /root/.bash_history
exit 0
EOF
done<pwds.txt