当前位置:   article > 正文

shell实战自动化创建用户,并设置密码

shell实战自动化创建用户,并设置密码

目录

一、主程序

二、程序分析

三、程序实战提升①

 四、程序实战提升②


一、主程序

  1. #!/bin/bash
  2. # 创建用户并设置密码的函数
  3. create_user() {
  4. local username=$1
  5. local password=$2
  6. if id "$username" &>/dev/null; then
  7. echo "用户 $username 已经存在。"
  8. else
  9. echo "正在创建用户 $username ..."
  10. useradd $username
  11. echo "$username:$password" | chpasswd
  12. echo "已为用户 $username 设置密码。"
  13. fi
  14. }
  15. # 读取输入信息
  16. echo "请输入要创建的用户列表,用逗号隔开:"
  17. read user_input
  18. # 检查用户输入是否为空
  19. if [ -z "$user_input" ]; then
  20. echo "输入错误,未提供任何用户名。"
  21. exit 1
  22. fi
  23. # 设置通用密码
  24. PASSWORD="xxxxxxxxxxxxxxx"
  25. # 分割输入的用户,并为每个用户调用创建函数
  26. IFS=',' read -ra USERS <<< "$user_input"
  27. for username in "${USERS[@]}"; do
  28. create_user "$username" "$PASSWORD"
  29. done

二、程序分析

这个脚本提供了一个用户创建操作的自动化过程。下面是脚本主要部分的分析:

  • create_user 函数:

    • 这个函数用来创建一个新用户。它接受两个参数:$1 (用户名) 和 $2 (密码)。
    • local username=$1 和 local password=$2 定义了两个局部变量,这避免了在函数内部对全局变量进行操作。
    • id "$username" &>/dev/null 这个命令检查系统中是否已存在用户名为$username的用户。&>/dev/null 将命令的标准输出和错误输出都重定向到 /dev/null(即丢弃这些输出)。
    • 如果用户已存在(if 条件为真),则打印存在信息。
    • 如果用户不存在,使用 useradd 命令创建用户,然后通过管道将新密码传递给 chpasswd 命令来设置密码。
  • 脚本的剩余部分:

    • 提示用户输入一系列用户名,用逗号分隔。
    • 检查用户输入是否为空,若为空则打印错误信息并退出脚本。
    • 设置了一个变量 PASSWORD 存储通用密码 "xxxxxxxxxx"
    • 使用 IFS=',' read -ra USERS <<< "$user_input" 将输入的用户列表字符串分隔成数组。IFS (内部字段分隔符) 被临时设置成逗号 ,read -ra 读入输入到名为 USERS 的数组。
    • 最后一个 for 循环遍历数组 USERS 中的每个用户名,并对每个用户名调用 create_user 函数来创建用户。

总的来说,这个脚本的目的是自动化用户创建过程,通过一个通用密码为一系列新用户设置账户和密码。此脚本还可以进一步增强,例如添加密码复杂性检查、支持逐个指定密码或引入更优的错误处理机制等。

三、程序实战提升①

  1. 密码现在需要手动输入,而不是使用硬编码的通用密码。
  2. 添加了检查手动输入密码的逻辑。如果未输入密码,则会提示用户输入密码,如果用户仍未输入,则自动生成一个8位包含大小写字母和数字的随机密码。
  3. 使用了 pwgen 命令来生成随机密码。确保您的系统中已安装 pwgen

下面是优化后的脚本:

bash

  1. #!/bin/bash
  2. # 引入 pwgen 命令,用于生成随机密码
  3. if ! command -v pwgen &> /dev/null; then
  4. echo "pwgen 命令未找到,请先安装 pwgen。"
  5. exit 1
  6. fi
  7. # 创建用户并设置密码的函数
  8. create_user() {
  9. local username=$1
  10. local password=$2
  11. if id "$username" &>/dev/null; then
  12. echo "用户 $username 已经存在。"
  13. else
  14. echo "正在创建用户 $username ..."
  15. useradd $username
  16. echo "$username:$password" | chpasswd
  17. echo "已为用户 $username 设置密码。"
  18. fi
  19. }
  20. # 读取输入信息
  21. echo "请输入要创建的用户列表,用逗号隔开:"
  22. read user_input
  23. # 检查用户输入是否为空
  24. if [ -z "$user_input" ]; then
  25. echo "输入错误,未提供任何用户名。"
  26. exit 1
  27. fi
  28. # 请求用户输入密码
  29. echo "请输入用户密码(留空将自动生成8位的随机密码):"
  30. read -s user_password
  31. # 如果用户未输入密码,则生成8位随机密码
  32. if [ -z "$user_password" ]; then
  33. user_password=$(pwgen 8 1)
  34. echo "未提供密码,将为所有用户使用随机密码:$user_password"
  35. fi
  36. # 分割输入的用户,并为每个用户调用创建函数
  37. IFS=',' read -ra USERS <<< "$user_input"
  38. for username in "${USERS[@]}"; do
  39. create_user "$username" "$user_password"
  40. done

这个脚本包括了以下改进:

  • 使用 pwgen 生成随机密码,该工具需要预先安装。
  • read -s 允许安静地(无回显)读取密码,提升安全性。

 四、程序实战提升②

包括手动输入密码、密码的验证、生成随机密码以及根据不同系统类型自动安装pwgen工具的功能。

bash

  1. #!/bin/bash
  2. # 创建用户并设置密码的函数
  3. create_user() {
  4. local username=$1
  5. local password=$2
  6. if id "$username" &>/dev/null; then
  7. echo "用户 $username 已经存在。"
  8. else
  9. echo "正在创建用户 $username ..."
  10. useradd $username
  11. echo "$username:$password" | chpasswd
  12. echo "已为用户 $username 设置密码。"
  13. fi
  14. }
  15. # 确保 pwgen 工具已安装
  16. ensure_pwgen_installed() {
  17. if ! command -v pwgen &>/dev/null; then
  18. echo "pwgen 命令未找到,请先安装 pwgen。"
  19. # 判断系统类型并安装 pwgen
  20. local os_type=$(uname -s)
  21. case "$os_type" in
  22. Linux)
  23. if [ -f /etc/debian_version ]; then
  24. # 基于Debian的系统
  25. sudo apt-get update && sudo apt-get install -y pwgen
  26. elif [ -f /etc/redhat-release ]; then
  27. # 基于RedHat的系统
  28. sudo yum install -y pwgen
  29. else
  30. echo "未识别的 Linux 发行版。请手动安装 pwgen。"
  31. fi
  32. ;;
  33. Darwin)
  34. # macOS 系统
  35. brew install pwgen
  36. ;;
  37. *)
  38. echo "不支持的操作系统。请手动安装 pwgen。"
  39. ;;
  40. esac
  41. fi
  42. }
  43. # 生成随机密码的函数
  44. generate_random_password() {
  45. ensure_pwgen_installed
  46. pwgen 8 1
  47. }
  48. # 读取输入信息
  49. echo "请输入要创建的用户列表,用逗号隔开:"
  50. read user_input
  51. # 检查用户输入是否为空
  52. if [ -z "$user_input" ]; then
  53. echo "输入错误,未提供任何用户名。"
  54. exit 1
  55. fi
  56. # 获取密码
  57. echo "请输入要设置的密码(留空则为每个用户生成随机密码):"
  58. read -s user_password
  59. # 如果未输入密码则生成随机密码
  60. if [ -z "$user_password" ]; then
  61. echo "未输入密码,将为每个用户生成随机密码。"
  62. user_password=$(generate_random_password)
  63. fi
  64. # 分割输入的用户,并为每个用户调用创建函数
  65. IFS=',' read -ra USERS <<< "$user_input"
  66. for username in "${USERS[@]}"; do
  67. create_user "$username" "$user_password"
  68. done

请注意,为了自动安装pwgen,该脚本需要运行管理权限,即可能需要用户在提示时输入密码。我为基于Debian和RedHat的Linux系统以及macOS系统添加了自动安装命令。如果用户的系统与这些不匹配或者不支持,那么会输出提示让用户手动安装pwgen。在一些系统中,默认不包括pwgen安装,因此需要先确保它已安装以便生成密码。

在运行此脚本之前,请确认你有足够的权限执行上述安装命令。毕竟,根据所处的系统环境和配置,可能需要调整此脚本以确保它能够正确执行。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/439069
推荐阅读
相关标签
  

闽ICP备14008679号