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


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

    目录

    背景说明

    开始操作

    修改密码


    背景说明

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

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

    开始操作

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

    1. sudo apt install expect -y
    2. sudo apt install sshpass -y

            编写脚本:

    vim check_user.sh

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

    1. #!/bin/bash
    2. # 输出文件
    3. OUTPUT_FILE="successful_ssh_logins.txt"
    4. # 清空输出文件
    5. > $OUTPUT_FILE
    6. # 默认值,定义 SSH 主机和端口
    7. SSH_USER="root"
    8. SSH_HOST="127.0.0.1"
    9. SSH_PORT=22
    10. # 在本地机器上获取 IP 地址
    11. MY_IP=$(curl -s http://ipinfo.io/ip)
    12. echo "本地IP地址: $MY_IP"
    13. while getopts ":u:h:p:" opt; do
    14. case $opt in
    15. u) SSH_USER="$OPTARG" ;;
    16. h) SSH_HOST="$OPTARG" ;;
    17. p) SSH_PORT="$OPTARG" ;;
    18. \?) echo "Invalid option -$OPTARG" >&2 ;;
    19. :) echo "Option -$OPTARG requires an argument." >&2 ;;
    20. esac
    21. done
    22. # 临时禁用命令历史
    23. original_histfile=$HISTFILE
    24. unset HISTFILE
    25. # 获取密码
    26. read -p "请输入你的SSH密码: " SSHPASS
    27. export SSHPASS
    28. # 登录到服务器并使用 sshpass 添加 fail2ban 白名单, 使用 -S 选项使 sudo 从标准输入读取密码,并使用 echo $SSHPASS 来提供该密码
    29. echo "登录$SSH_HOST添加fail2ban白名单"
    30. sshpass -e ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $SSH_PORT $USER@$SSH_HOST "
    31. if grep -q '^ignoreip' /etc/fail2ban/jail.local; then
    32. echo $SSHPASS | sudo -S sed -i '/^ignoreip =/ s/$/ $MY_IP/' /etc/fail2ban/jail.local;
    33. elif grep -q '^#ignoreip' /etc/fail2ban/jail.local; then
    34. echo $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;
    35. else
    36. echo 'ignoreip = 127.0.0.1/8 ::1 $MY_IP' | echo $SSHPASS | sudo -S tee -a /etc/fail2ban/jail.local;
    37. fi;
    38. echo $SSHPASS | sudo -S service fail2ban restart;
    39. "
    40. # 使用 sshpass 获取/home下的所有用户
    41. USERS=$(sshpass -e ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $SSH_PORT $USER@$SSH_HOST "ls /home")
    42. # 遍历每个用户
    43. for cUSER in $USERS; do
    44. # 输出当前尝试的用户名
    45. echo ">> [$SSH_HOST]当前尝试登录账户: $cUSER..."
    46. # 使用expect工具自动登录 SSH
    47. LOGIN_RESULT=$(expect -c "
    48. spawn ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $SSH_PORT $cUSER@$SSH_HOST
    49. expect {
    50. # Handle the known hosts warning
    51. \"Are you sure you want to continue connecting (yes/no)?\" {
    52. send \"yes\r\"
    53. expect \"password:\"
    54. send \"$cUSER\r\"
    55. }
    56. # Handle the password prompt directly
    57. \"password:\" {
    58. send \"$cUSER\r\"
    59. }
    60. }
    61. expect {
    62. \"Permission denied, please try again.\" { puts \"Failed: $cUSER\" }
    63. \"$cUSER@\" { puts \"Success: $cUSER\" }
    64. default {
    65. puts \"在登录 $cUSER 用户时候遇到了未知错误:\"
    66. puts \"---\"
    67. puts \"$expect_out(buffer)\"
    68. puts \"---\"
    69. }
    70. }
    71. " 2>/dev/null)
    72. # 使用expect工具自动切换用户
    73. #LOGIN_RESULT=$(expect -c "
    74. #spawn su - $cUSER
    75. #expect {
    76. # \"Password: \" {
    77. # send \"$cUSER\r\"
    78. # expect {
    79. # \"su: Authentication failure\" { puts \"Failed: $cUSER\" }
    80. # \"$USER@\" { puts \"Success: $cUSER\" }
    81. # default { puts \"Unknown response for user: $cUSER\" }
    82. # }
    83. # }
    84. #}
    85. #" 2>/dev/null)
    86. # 如果成功,输出成功消息
    87. #echo "$LOGIN_RESULT"
    88. if echo "$LOGIN_RESULT" | grep -q "Success"; then
    89. echo "Login successful for user: $cUSER"
    90. echo "$cUSER" >> $OUTPUT_FILE
    91. fi
    92. done
    93. #echo "登录$SSH_HOST解除fail2ban对本机的ban"
    94. #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"
    95. # 登录到服务器并使用 sshpass 启动 fail2ban 服务,使用 -S 选项使 sudo 从标准输入读取密码,并使用 echo $SSHPASS 来提供该密码
    96. echo "登录$SSH_HOST移除fail2ban白名单"
    97. sshpass -e ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $SSH_PORT $USER@$SSH_HOST "
    98. if grep -q '^ignoreip' /etc/fail2ban/jail.local; then
    99. echo $SSHPASS | sudo -S sed -i 's/ $MY_IP//g' /etc/fail2ban/jail.local;
    100. echo $SSHPASS | sudo -S sed -i 's/$MY_IP //g' /etc/fail2ban/jail.local;
    101. fi;
    102. echo $SSHPASS | sudo -S service fail2ban restart;
    103. "
    104. # 删除 SSHPASS 变量,以确保密码不会留在环境中
    105. unset SSHPASS
    106. # 恢复命令历史记录
    107. export HISTFILE=$original_histfile
    108. NUM_SUCCESS=$(wc -l < $OUTPUT_FILE)
    109. echo "脚本已完成, 共查出[$NUM_SUCCESS]个用户, 请检查输出的结果文件: $OUTPUT_FILE ."
    110. echo "$OUTPUT_FILE 文件中的内容为: "
    111. 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”。

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

  • 相关阅读:
    微信第三方sdk获取openid 报错Caused by: java.lang.NoClassDefFoundError
    小米汽车,能否在新能源汽车江湖站稳脚跟?
    解决requests库中的期限处理问题:从404到异常再到修复
    如何在PIL图像和PyTorch Tensor之间进行相互转换,使用pytorch进行PIL和tensor之间的数据转换
    基于SpringBoot的网上超市系统
    【无标题】
    项目风险管理十大黄金法则!高质量项目管理必杀技!
    awk根据某个字段过滤文件航
    【开放视觉】AI人像特效之「更快、更高、更强的互娱换脸解决方案」
    数据结构(郝斌)】03线性结构-数组[连续存储数组的算法演示]
  • 原文地址:https://blog.csdn.net/sxf1061700625/article/details/133272340