从命令行创建新用户需要什么步骤?


27

哪些命令(或脚本)可以在Mountain Lion上创建功能齐全的用户帐户,仅通过终端或ssh从命令行运行。

似乎已有答案可能有效,但我想知道是否有一个简短的脚本或工具可用于在Mountain Lion上创建功能齐全的用户帐户?

Answers:


33

这是我在工作中编写的Shell脚本,它作为NetInstall流程的一部分(在映像过程中自动创建本地管理员帐户)进行处理。

#!/bin/sh
. /etc/rc.common
dscl . create /Users/administrator
dscl . create /Users/administrator RealName "Administrator Account"
dscl . create /Users/administrator hint "Password Hint"
dscl . create /Users/administrator picture "/Path/To/Picture.png"
dscl . passwd /Users/administrator thisistheaccountpassword
dscl . create /Users/administrator UniqueID 501
dscl . create /Users/administrator PrimaryGroupID 80
dscl . create /Users/administrator UserShell /bin/bash
dscl . create /Users/administrator NFSHomeDirectory /Users/administrator
cp -R /System/Library/User\ Template/English.lproj /Users/administrator
chown -R administrator:staff /Users/administrator

一些注意事项:

  • 我将其保存为可执行的“ .sh”文件。
  • 由于它是在NetInstall期间执行的,因此它以root身份运行,并且需要以root身份运行才能正常工作。您还可以减去前两行,在每个后续行的开头添加“ sudo”,然后在终端中将它们作为单独的命令手动运行。
  • 将UniqueID从501修改为在所有系统上都可以安全使用的数字(501是在Mac上创建的第一个帐户使用的,通常更高的值(例如550)可能是安全的,具体取决于系统上有多少用户) 。
  • PrimaryGroupID为80将创建一个Admin用户。更改为PrimaryGroupID为20以创建标准用户。
  • 我已经用这种方式为50多台Mac成像了,没有任何问题。我使用此帐户通过SSH运行命令,通过ARD推出补丁程序以及进行本地桌面管理。

看起来很有希望-即将进行测试!
bmike

当我尝试通过将变量传递给脚本来修改该脚本以创建常规用户时,我似乎遇到的问题是,除了最后一行以外的所有内容都可以正常工作。也就是说,dscl创建用户,并且当我使用dscl时。list / users,该用户显示就很好,但是chown无法识别该用户,并且由于我无法正确更改主目录权限,因此该用户无法登录。有什么想法吗?

我希望我能。关于shell脚本,我的弱点之一是我从未很好地学习过变量的用法,主要是因为在我的工作中,我实际上并不需要将其用于任何事情。也许@bmike或其他人可以提供建议。
bispymusic 2013年

@HackintoshCoat您可以发布脚本吗?在命令中,您键入的小写字母为“ / users”,而实际上为“ / Users”。我怀疑这就是您的脚本的问题;但是,新鲜的眼睛检查它也许可以很快找到问题所在。我有一个实际上可以设置多个用户的类似脚本,因此变量本身的使用不是问题。
肯特,

2
您可以使用命令而不是最后两行(cp -R ...; chown -R ...createhomedir -u administratorcreatehomedir也有一个手册页。
亚历·里奇

14

为了进一步实现此目的,如果您在已设置用户的Mac上运行,则以下行可用于获取下一个“可用”用户ID。

LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`

NextID=$((LastID + 1))

然后,可以更改上面bispymusic的答案中的相应行:

 dscl . create /Users/administrator UniqueID $NextID

2

我对以上答案有一些更新。

dscl / -append /Groups/admin GroupMembership newUserName

此命令可用于使用户具有管理访问权限。如果未提供此命令,则用户将自动设置为标准用户。

dscl . create /Users/newUserName PrimaryGroupID 80

设置用户的主要组ID。80表示管理员 ,20表示员工。并将其设置为20不会成为用户标准。除非没有提到第一个命令。


需要澄清的是,这些命令中的任何一个都可以完成相同的任务?
MaxGabriel

我更喜欢第一个命令,追加到/ Groups / admin
Vipin Johney 2013年

0

这是我编写的Shell脚本,用于使用命令行在Max OS X中添加新用户。就像在Linux上一样工作。可以根据自己的需要随意编辑。只需将其命名为useradd.sh并设置正确的权限即可(chmod 0700 useradd.sh以我为例)。感谢bispymusic,Alex Leach,Ken​​t的贡献。

OS X High Sierra测试

#!/bin/sh

if [[ `id -u` != 0 ]]; then
    echo "Must be root to run script"
    exit
fi

read -p "Enter user name and press [ENTER]: " UserName

if [[ $UserName == `dscl . -list /Users UniqueID | awk '{print $1}' | grep -w $UserName` ]]; then
    echo "User already exists!"
    exit 0
fi

read -p "Enter real name and press [ENTER]: " RealName
read -p "Enter PrimaryGroupID (80 - admin, 20 - user) and press [ENTER]: " PrimaryGroupID
LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`
NextID=$((LastID + 1))

. /etc/rc.common
dscl . create /Users/$UserName
dscl . create /Users/$UserName RealName $RealName

read -p "Enter password hint and press [ENTER]: " PasswordHint
dscl . create /Users/$UserName hint $PasswordHint
PasswordHint=0

echo " "
read -s -p "Enter Account Password and press [ENTER]: " AccountPassword
echo " "
read -s -p "Enter Account Password again and press [ENTER]: " AccountPasswordRepeat
if [[ $AccountPassword == $AccountPasswordRepeat ]]; then
  dscl . passwd /Users/$UserName $AccountPassword
  AccountPassword=0
else
  echo "Passwords do not match!"
  exit 1
fi
echo " "
dscl . create /Users/$UserName UniqueID $NextID
dscl . create /Users/$UserName PrimaryGroupID $PrimaryGroupID
dscl . create /Users/$UserName UserShell /bin/bash
dscl . create /Users/$UserName NFSHomeDirectory /Users/$UserName
createhomedir -u $UserName -c

echo " "
echo "New user `dscl . -list /Users UniqueID | awk '{print $1}' | grep -w $UserName` has been created with unique ID `dscl . -list /Users UniqueID | grep -w $UserName | awk '{print $2}'`"

你可以从我的主意中得到一个


可能是,NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1))但是看起来更好,现在更清晰了。
伊戈尔·沃尔塔克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.