コマンドラインから新しいユーザーを作成するには、どのような手順が必要ですか?


27

どのコマンド(またはスクリプト)がMountain Lionで完全に機能するユーザーアカウントを作成でき、ターミナルまたはsshを介してコマンドラインからのみ実行できます。

既存の回答のペアが機能するように見えますが、Mountain Lionで完全に機能するユーザーアカウントを作成するための短いスクリプトまたはツールがあるかどうか疑問に思いました。

回答:


33

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として実行する必要があります。また、最初の2行を減算し、後続の各行の先頭に「sudo」を追加し、これらをターミナルで個別のコマンドとして手動で実行することもできます。
  • UniqueIDを501から、すべてのシステムで安全であることがわかっている番号に変更します(501はMacで作成された最初のアカウントによって取得されます。 。
  • PrimaryGroupIDが80の場合、管理ユーザーが作成されます。20のPrimaryGroupIDに変更して、標準ユーザーを作成します。
  • この方法で50台以上のMacを問題なくイメージできました。このアカウントを使用して、SSH経由でコマンドを実行し、ARD経由でパッチをプッシュし、ローカルのデスクサイド管理を行います。

有望に見えます-すぐにテストします!
bmike

このスクリプトに変数を渡して通常のユーザーを作成しようとすると、最後の行を除くすべてが正常に機能するという問題があります。つまり、dsclがユーザーを作成し、dsclを使用します。リスト/ users、ユーザーはうまく表示されますが、chownはユーザーを認識しません。また、ホームディレクトリのアクセス許可を適切に変更できないため、そのユーザーはログインできません。

私もそう出来ればいいけど。シェルスクリプトに関する私の弱点の1つは、主に仕事のこの時点で実際に変数を使用する必要がないため、変数の使用法をあまりよく学んでいないことです。@bmikeまたは他の誰かがアドバイスを提供できるかもしれません。
bispymusic

@HackintoshCoatスクリプトを投稿できますか?コマンドでは、小文字の「/ users」を実際に「/ Users」と入力しました。これがスクリプトの問題だとは思いません。しかし、それをチェックする新鮮な目は問題をかなり迅速に見つけることができるかもしれません。実際に複数のユーザーを設定する同様のスクリプトがあるので、変数自体の使用は問題ありません。
ケント

2
最後の2行(cp -R ...; chown -R ...)の代わりに、コマンドを使用できますcreatehomedir -u administratorcreatehomedirマニュアルページもあります。
アレックスリーチ14

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に設定してもユーザーは標準になりません。最初のコマンドが言及されていない限り。


明確にするために、これらのコマンドのどちらも同じことを達成しますか?
マックスガブリエル

/ Groups / adminに追加する最初のコマンドを好みます。
ヴィピンジョニー

0

これは、コマンドラインを使用してMax OS Xに新しいユーザーを追加するために作成したシェルスクリプトです。Linuxの場合と同じように機能します。個人のニーズに合わせて自由に編集してください。それにuseradd.shという名前を付け、正しいアクセス権を設定します(chmod 0700 useradd.sh私の場合)。貢献してくれたbispymusic、KentのAlex Leachに感謝します。

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))が、見た目が良くなり、現在の状態がより明確になりました。
イゴールボルタイック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.