有趣的地方

有趣的地方

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

一、主程序

#!/bin/bash

# 创建用户并设置密码的函数
create_user() {
    local username=$1
    local password=$2
    if id "$username" &>/dev/null; then
        echo "用户 $username 已经存在。"
    else
        echo "正在创建用户 $username ..."
        useradd $username
        echo "$username:$password" | chpasswd
        echo "已为用户 $username 设置密码。"
    fi
}

# 读取输入信息
echo "请输入要创建的用户列表,用逗号隔开:"
read user_input

# 检查用户输入是否为空
if [ -z "$user_input" ]; then
    echo "输入错误,未提供任何用户名。"
    exit 1
fi

# 设置通用密码
PASSWORD="xxxxxxxxxxxxxxx"

# 分割输入的用户,并为每个用户调用创建函数
IFS=',' read -ra USERS <<< "$user_input"
for username in "${USERS[@]}"; do
    create_user "$username" "$PASSWORD"
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

#!/bin/bash

# 引入 pwgen 命令,用于生成随机密码
if ! command -v pwgen &> /dev/null; then
    echo "pwgen 命令未找到,请先安装 pwgen。"
    exit 1
fi

# 创建用户并设置密码的函数
create_user() {
    local username=$1
    local password=$2
    if id "$username" &>/dev/null; then
        echo "用户 $username 已经存在。"
    else
        echo "正在创建用户 $username ..."
        useradd $username
        echo "$username:$password" | chpasswd
        echo "已为用户 $username 设置密码。"
    fi
}

# 读取输入信息
echo "请输入要创建的用户列表,用逗号隔开:"
read user_input

# 检查用户输入是否为空
if [ -z "$user_input" ]; then
    echo "输入错误,未提供任何用户名。"
    exit 1
fi

# 请求用户输入密码
echo "请输入用户密码(留空将自动生成8位的随机密码):"
read -s user_password

# 如果用户未输入密码,则生成8位随机密码
if [ -z "$user_password" ]; then
    user_password=$(pwgen 8 1)
    echo "未提供密码,将为所有用户使用随机密码:$user_password"
fi

# 分割输入的用户,并为每个用户调用创建函数
IFS=',' read -ra USERS <<< "$user_input"
for username in "${USERS[@]}"; do
    create_user "$username" "$user_password"
done

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

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

 四、程序实战提升②

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

bash

#!/bin/bash

# 创建用户并设置密码的函数
create_user() {
    local username=$1
    local password=$2
    if id "$username" &>/dev/null; then
        echo "用户 $username 已经存在。"
    else
        echo "正在创建用户 $username ..."
        useradd $username
        echo "$username:$password" | chpasswd
        echo "已为用户 $username 设置密码。"
    fi
}

# 确保 pwgen 工具已安装
ensure_pwgen_installed() {
    if ! command -v pwgen &>/dev/null; then
        echo "pwgen 命令未找到,请先安装 pwgen。"
        # 判断系统类型并安装 pwgen
        local os_type=$(uname -s)
        case "$os_type" in
            Linux)
                if [ -f /etc/debian_version ]; then
                    # 基于Debian的系统
                    sudo apt-get update && sudo apt-get install -y pwgen
                elif [ -f /etc/redhat-release ]; then
                    # 基于RedHat的系统
                    sudo yum install -y pwgen
                else
                    echo "未识别的 Linux 发行版。请手动安装 pwgen。"
                fi
                ;;
            Darwin)
                # macOS 系统
                brew install pwgen
                ;;
            *)
                echo "不支持的操作系统。请手动安装 pwgen。"
                ;;
        esac
    fi
}

# 生成随机密码的函数
generate_random_password() {
    ensure_pwgen_installed
    pwgen 8 1
}

# 读取输入信息
echo "请输入要创建的用户列表,用逗号隔开:"
read user_input

# 检查用户输入是否为空
if [ -z "$user_input" ]; then
    echo "输入错误,未提供任何用户名。"
    exit 1
fi

# 获取密码
echo "请输入要设置的密码(留空则为每个用户生成随机密码):"
read -s user_password

# 如果未输入密码则生成随机密码
if [ -z "$user_password" ]; then
    echo "未输入密码,将为每个用户生成随机密码。"
    user_password=$(generate_random_password)
fi

# 分割输入的用户,并为每个用户调用创建函数
IFS=',' read -ra USERS <<< "$user_input"
for username in "${USERS[@]}"; do
    create_user "$username" "$user_password"
done

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

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

发表评论:

Powered By Z-BlogPHP 1.7.3

© 2018-2020 有趣的地方 粤ICP备18140861号-1 网站地图