You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 11脚本开发求助:用户创建与加密密码传递难题

解决Ubuntu 11脚本中加密密码传递与命令输出赋值问题

嘿,作为新手在Ubuntu 11里写脚本遇到这个问题太正常了,我一步步帮你搞定!咱们先从你困惑的命令输出赋值变量和openssl加密密码传递给usermod这两个核心点入手,再整合你需要的所有功能。

核心知识点先搞明白

1. 把命令输出赋值给变量

在bash脚本里,用$()就能轻松捕获命令的输出,这是新手必须掌握的基础技巧。比如你要把openssl加密后的密码存到变量里,写法是:

# 假设用户名为user1
username="user1"
# 用openssl生成MD5加密的密码(和用户名一致)
encrypted_pass=$(openssl passwd -1 "$username")

这里的-1选项是指定生成MD5格式的哈希,这是Ubuntu系统默认支持的密码加密格式,usermod能直接识别。

2. 用加密后的密码设置用户密码

usermod的-p参数需要的是加密后的密码字符串,不是明文,所以直接把刚才的变量传进去就行:

usermod -p "$encrypted_pass" "$username"

一定要用双引号把变量括起来,避免用户名或密码里有特殊字符(比如空格)时出错。

完整脚本实现

结合你需要的所有功能:接收参数、创建两个用户、移动文件、设默认密码(与登录名一致)、强制首次登录改密码,我写了一个带详细注释的示例脚本,你可以直接用:

#!/bin/bash

# 检查是否传入了两个用户名参数
if [ $# -ne 2 ]; then
    echo "用法: $0 <用户名1> <用户名2>"
    exit 1
fi

# 从参数获取两个用户名
user1="$1"
user2="$2"

# 定义要移动的文件路径和目标目录(你可以根据实际情况修改)
source_files="/tmp/test_files/*"
dest_dir="/home/shared_files/"

# 1. 创建两个用户(-m选项自动创建家目录,Ubuntu 11的useradd默认不创建)
echo "正在创建用户 $user1 和 $user2..."
useradd -m "$user1"
useradd -m "$user2"

# 2. 为每个用户设置默认密码(与登录名一致)并强制首次登录改密码
for user in "$user1" "$user2"; do
    # 加密密码
    encrypted_pass=$(openssl passwd -1 "$user")
    # 设置密码
    usermod -p "$encrypted_pass" "$user"
    # 强制首次登录改密码(chage -d 0 把最后修改密码日期设为0,下次登录必须修改)
    chage -d 0 "$user"
    echo "用户 $user 的默认密码已设置为登录名,首次登录需修改"
done

# 3. 移动一批文件(先检查目标目录是否存在,不存在则创建)
echo "正在移动文件..."
mkdir -p "$dest_dir"
mv "$source_files" "$dest_dir"
echo "文件已移动到 $dest_dir"

echo "所有操作完成!"

使用说明

  1. 把脚本保存为setup_users.sh
  2. 给脚本加执行权限:chmod +x setup_users.sh
  3. 运行脚本(需要sudo权限,因为创建用户、修改密码是管理员操作):
sudo ./setup_users.sh alice bob

注意事项

  • Ubuntu 11比较老,确保你的系统上已经安装了openssl:sudo apt-get install openssl
  • 移动文件时,要确保源文件路径正确,并且你有读取权限,目标目录有写入权限
  • 如果用户名包含特殊字符,脚本里的双引号已经帮你处理了,不用担心

内容的提问来源于stack exchange,提问作者Mrs Prerobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 06:22:44