shell实战自动化创建用户,并设置密码
目录
一、主程序
#!/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
函数来创建用户。
总的来说,这个脚本的目的是自动化用户创建过程,通过一个通用密码为一系列新用户设置账户和密码。此脚本还可以进一步增强,例如添加密码复杂性检查、支持逐个指定密码或引入更优的错误处理机制等。
三、程序实战提升①
- 密码现在需要手动输入,而不是使用硬编码的通用密码。
- 添加了检查手动输入密码的逻辑。如果未输入密码,则会提示用户输入密码,如果用户仍未输入,则自动生成一个8位包含大小写字母和数字的随机密码。
- 使用了
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
安装,因此需要先确保它已安装以便生成密码。
在运行此脚本之前,请确认你有足够的权限执行上述安装命令。毕竟,根据所处的系统环境和配置,可能需要调整此脚本以确保它能够正确执行。
原文地址:https://blog.csdn.net/jundao1997/article/details/137591104
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!