当前位置: 首页 > news >正文

【教程】Ubuntu自动查看有哪些用户名与密码相同的账户,并统一修改密码

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

目录

背景说明

开始操作

修改密码


背景说明

        有些用户为了图方便或者初始创建用户默认设置等原因,会将密码设置为与用户名相同,但这就使得非常不安全。甚至如果该用户具有sudo权限,那这服务器就是台肉鸡。所以要检查哪些账号存在这种情况。

对于自动撤销sudo权限可以看这个:【技巧】Ubuntu临时授予用户sudo权限,并在一定时间后自动撤销

开始操作

        在你要执行脚本的服务器上先安装库:

sudo apt install expect -y
sudo apt install sshpass -y

        编写脚本:

vim check_user.sh

        脚本内容(注意,SSH_HOST可以改成其他服务器ip,这样就不需要把脚本复制到每一台服务器上去运行了):

#!/bin/bash# 输出文件
OUTPUT_FILE="successful_ssh_logins.txt"# 清空输出文件
> $OUTPUT_FILE# 默认值,定义 SSH 主机和端口
SSH_USER="root"
SSH_HOST="127.0.0.1"
SSH_PORT=22
# 在本地机器上获取 IP 地址
MY_IP=$(curl -s http://ipinfo.io/ip)
echo "本地IP地址: $MY_IP"while getopts ":u:h:p:" opt; docase $opt inu) SSH_USER="$OPTARG" ;;h) SSH_HOST="$OPTARG" ;;p) SSH_PORT="$OPTARG" ;;\?) echo "Invalid option -$OPTARG" >&2 ;;:) echo "Option -$OPTARG requires an argument." >&2 ;;esac
done# 临时禁用命令历史
original_histfile=$HISTFILE
unset HISTFILE
# 获取密码
read -p "请输入你的SSH密码: " SSHPASS
export SSHPASS# 登录到服务器并使用 sshpass 添加 fail2ban 白名单, 使用 -S 选项使 sudo 从标准输入读取密码,并使用 echo $SSHPASS 来提供该密码
echo "登录$SSH_HOST添加fail2ban白名单"
sshpass -e  ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $SSH_PORT $USER@$SSH_HOST "if grep -q '^ignoreip' /etc/fail2ban/jail.local; thenecho $SSHPASS | sudo -S sed -i '/^ignoreip =/ s/$/ $MY_IP/' /etc/fail2ban/jail.local;elif grep -q '^#ignoreip' /etc/fail2ban/jail.local; thenecho $SSHPASS | sudo -S sed -i 's/^#ignoreip = 127.0.0.1\\/8 ::1/ignoreip = 127.0.0.1\\/8 ::1 $MY_IP/' /etc/fail2ban/jail.local;elseecho 'ignoreip = 127.0.0.1/8 ::1 $MY_IP' | echo $SSHPASS | sudo -S tee -a /etc/fail2ban/jail.local;fi;echo $SSHPASS | sudo -S service fail2ban restart;
"# 使用 sshpass 获取/home下的所有用户
USERS=$(sshpass -e ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $SSH_PORT $USER@$SSH_HOST "ls /home")# 遍历每个用户
for cUSER in $USERS; do# 输出当前尝试的用户名echo ">> [$SSH_HOST]当前尝试登录账户: $cUSER..."# 使用expect工具自动登录 SSHLOGIN_RESULT=$(expect -c "spawn ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $SSH_PORT $cUSER@$SSH_HOSTexpect {# Handle the known hosts warning\"Are you sure you want to continue connecting (yes/no)?\" {send \"yes\r\"expect \"password:\"send \"$cUSER\r\"}# Handle the password prompt directly\"password:\" {send \"$cUSER\r\"}}expect {\"Permission denied, please try again.\" { puts \"Failed: $cUSER\" }\"$cUSER@\" { puts \"Success: $cUSER\" }default {puts \"在登录 $cUSER 用户时候遇到了未知错误:\"puts \"---\"puts \"$expect_out(buffer)\"puts \"---\"}}" 2>/dev/null)# 使用expect工具自动切换用户#LOGIN_RESULT=$(expect -c "#spawn su - $cUSER#expect {#  \"Password: \" {#    send \"$cUSER\r\"#    expect {#      \"su: Authentication failure\" { puts \"Failed: $cUSER\" }#      \"$USER@\" { puts \"Success: $cUSER\" }#      default { puts \"Unknown response for user: $cUSER\" }#    }#  }#}#"  2>/dev/null)# 如果成功,输出成功消息#echo "$LOGIN_RESULT"if echo "$LOGIN_RESULT" | grep -q "Success"; thenecho "Login successful for user: $cUSER"echo "$cUSER" >> $OUTPUT_FILEfidone#echo "登录$SSH_HOST解除fail2ban对本机的ban"
#echo $SSHPASS | sshpass -e ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $SSH_PORT $USER@$SSH_HOST "sudo -S fail2ban-client unban $MY_IP"
# 登录到服务器并使用 sshpass 启动 fail2ban 服务,使用 -S 选项使 sudo 从标准输入读取密码,并使用 echo $SSHPASS 来提供该密码
echo "登录$SSH_HOST移除fail2ban白名单"
sshpass -e ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $SSH_PORT $USER@$SSH_HOST "if grep -q '^ignoreip' /etc/fail2ban/jail.local; thenecho $SSHPASS | sudo -S sed -i 's/ $MY_IP//g' /etc/fail2ban/jail.local;echo $SSHPASS | sudo -S sed -i 's/$MY_IP //g' /etc/fail2ban/jail.local;fi;echo $SSHPASS | sudo -S service fail2ban restart;
"# 删除 SSHPASS 变量,以确保密码不会留在环境中
unset SSHPASS
# 恢复命令历史记录
export HISTFILE=$original_histfileNUM_SUCCESS=$(wc -l < $OUTPUT_FILE)
echo "脚本已完成, 共查出[$NUM_SUCCESS]个用户, 请检查输出的结果文件: $OUTPUT_FILE ."
echo "$OUTPUT_FILE 文件中的内容为: "
cat $OUTPUT_FILE

        运行示例:

sh check_user.sh
sh check_user.sh -p 8022
sh check_user.sh -h xxxxxx
sh check_user.sh -h xxxxxx -p 8022
sh check_user.sh -u root -h xxxxxx -p 8022

       结果示例:  

修改密码

        上面脚本最后得到了用户名和密码相同的账号。现在需要对这些账号修改密码,修改规则为:“原密码@xxx”。

#!/bin/bash# 之前的脚本中记录用户名的文件
OUTPUT_FILE="/path/to/your/output/file"# 使用 SSH 连接到远程服务器
echo $SSHPASS | sshpass -e ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $SSH_PORT $USER@$SSH_HOST "while IFS= read -r USER; do# 构建新密码NEW_PASS=\"\$USER@xxx\"# 更改密码echo -e \"\$USER\n\$NEW_PASS\" | sudo -S passwd \$USERdone < $OUTPUT_FILE
"

http://www.lryc.cn/news/178371.html

相关文章:

  • 基于 Python+DenseNet121 算法模型实现一个图像分类识别系统
  • 贪心算法-点灯问题
  • 软件测试之单元测试自动化入门基础
  • 93 # 实现 express 错误处理中间件
  • PHP 创建 MySQL 表
  • 中兴R5300 G4服务器iSAC管理员zteroot密码遗失的重置方法及IPV6地址启用设置
  • 大数据分布式处理框架Hadoop
  • echarts学习总结
  • 与初至波相关的常见误解
  • screenfull全屏、退出全屏、指定元素全屏的使用步骤
  • 问题 - 谷歌浏览器 network 看不到接口请求解决方案
  • Java:正则表达式的命名捕获组
  • ELK 处理 Spring Boot 日志
  • No152.精选前端面试题,享受每天的挑战和学习
  • Flutter:类功能索引(全)
  • 电脑技巧:笔记本电脑升级固态硬盘的注意事项,看完你就懂了
  • TLS/SSL(一)科普之加密、签名和SSL握手
  • UVA-1374 旋转游戏 题解答案代码 算法竞赛入门经典第二版
  • logback.xml springboot 项目通用logback配置,粘贴即用,按日期生成
  • 【AI视野·今日CV 计算机视觉论文速览 第256期】Thu, 28 Sep 2023
  • 2023-9-28 JZ26 树的子结构
  • ElementUI之首页导航+左侧菜单
  • 【Linux学习】04Linux实用操作
  • 一篇博客学会系列(1) —— C语言中所有字符串函数以及内存函数的使用和注意事项
  • 计算机视觉与深度学习-循环神经网络与注意力机制-RNN(Recurrent Neural Network)、LSTM-【北邮鲁鹏】
  • brew 安装MySQL 5.7
  • 【中国知名企业高管团队】系列22:滴滴
  • Unity之Hololens如何实现3D物体交互
  • IDEA Debug技巧大全,看完就能提升工作效率
  • 蓝桥等考Python组别六级003