如何编写Shell脚本创建用户并生成随机密码?请帮忙检查我的脚本
Shell脚本优化建议:批量创建带随机密码的用户
原脚本问题梳理
你的脚本目标是创建3个带随机密码的用户,但存在几个明显的问题:
- 每次调用
create_user函数都会执行sudo apt install pwgen,重复安装完全没必要 - 生成的密码
$password根本没设置给用户,等于白生成 - 多余的
sudo pwgen 5 1调用,生成的密码既没保存也没用到 sudo chmod u+x homework.sh放在函数里每次执行毫无意义,这应该是脚本本身的权限设置,只需要做一次useradd默认不创建用户家目录,不符合常规使用场景- 没有检查用户是否已存在,重复运行脚本会报错
- 密码长度只有5位,安全性偏低
优化后的脚本
#!/bin/bash # 先检查pwgen是否安装,没装就一次性装好 if ! command -v pwgen &> /dev/null; then sudo apt update && sudo apt install -y pwgen fi create_user() { # 用local把变量限制在函数内,避免污染全局 local user_name=$1 # 先检查用户是否已经存在 if id "$user_name" &> /dev/null; then echo "用户 $user_name 已经存在,跳过创建" return 1 fi # 生成10位的随机密码,比5位更安全 local password=$(pwgen 10 1) # 创建用户并自动生成家目录 sudo useradd -m "$user_name" # 用chpasswd设置密码,这一步才是真正把密码绑定给用户 echo "$user_name:$password" | sudo chpasswd # 验证创建结果 if id "$user_name" &> /dev/null; then echo "用户 $user_name 创建成功,密码:$password" # 可选:把账号密码存到文件,方便后续管理(记得给文件设权限,比如chmod 600 user_credentials.csv) echo "$user_name,$password" >> user_credentials.csv else echo "用户 $user_name 创建失败" fi } # 批量创建用户 create_user adam create_user bety create_user carl
优化点说明
- 只在脚本开头检查并安装
pwgen一次,避免重复操作 - 增加用户存在性检查,防止重复创建报错
- 用
-m参数让useradd自动创建家目录,符合日常使用需求 - 通过
chpasswd正确设置用户密码,解决原脚本密码无效的问题 - 把函数内变量设为
local,避免全局变量污染 - 提升密码长度到10位,增强安全性
- 增加创建结果验证,脚本更健壮
- 可选添加密码记录到文件,方便后续管理(注意保护这个文件的权限,避免密码泄露)
内容的提问来源于stack exchange,提问作者Adeola
相关产品推荐
相关产品推荐

