← 返回
新建 sudo 用户
建一个带 sudo 权限的用户,可选把公钥一并写进去。会自动认 sudo 组还是 wheel 组。
需要 root
一键执行
curl -fsSL https://www.moiu.cn/scripts/user-add.sh | bash脚本源码
#!/usr/bin/env bash
# 新建 sudo 用户
#
# 建一个带 sudo 权限的用户,可选把公钥一并写进它的 authorized_keys。
# 用法:bash user-add.sh <用户名> [公钥]
set -e
# 需要 root:下面的系统级改动都直接执行,不再逐条 sudo
if [ "$(id -u)" -ne 0 ]; then
echo '[!] 这个脚本需要 root 权限,请用 sudo 重新运行:'
echo ' curl -fsSL 脚本地址 | sudo bash'
echo ' 或已经下载到本地:sudo bash 本文件'
exit 1
fi
NAME="$1"
KEY="$2"
if [ -z "$NAME" ]; then
echo '用法:bash user-add.sh <用户名> [公钥]'
exit 1
fi
case "$NAME" in
*[!a-z0-9_-]*) echo "[!] 用户名只允许小写字母、数字、下划线、连字符:$NAME"; exit 1 ;;
esac
NAME_LEN=$(printf '%s' "$NAME" | wc -c)
if [ "$NAME_LEN" -gt 32 ]; then
echo '[!] 用户名太长了(超过 32 个字符)'
exit 1
fi
if id "$NAME" >/dev/null 2>&1; then
echo "[!] 用户已存在:$NAME"
else
useradd -m -s /bin/bash "$NAME"
echo "[*] 已创建用户 $NAME"
fi
# sudo 组在 Debian / Ubuntu 上叫 sudo,RHEL 系叫 wheel
if getent group sudo >/dev/null 2>&1; then
GROUP=sudo
else
GROUP=wheel
fi
usermod -aG "$GROUP" "$NAME"
echo "[*] 已加入 $GROUP 组"
if [ -n "$KEY" ]; then
HOME_DIR=$(getent passwd "$NAME" | cut -d: -f6)
mkdir -p "$HOME_DIR/.ssh"
printf '%s\n' "$KEY" >> "$HOME_DIR/.ssh/authorized_keys"
chmod 700 "$HOME_DIR/.ssh"
chmod 600 "$HOME_DIR/.ssh/authorized_keys"
chown -R "$NAME":"$NAME" "$HOME_DIR/.ssh"
echo "[*] 公钥已写入 $HOME_DIR/.ssh/authorized_keys"
fi
echo ''
echo " 用户:$NAME(组:$GROUP)"
echo '❗ 先确认能登录,再考虑关掉密码登录。'
