명령 행에서 새 사용자를 작성하려면 어떤 단계가 필요합니까?


27

터미널 또는 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 중에 실행되므로 루트로 실행되며 제대로 작동하려면 루트로 실행해야합니다. 또한 처음 두 줄을 빼고 각 후속 줄의 시작 부분에 "스도"를 추가 한 다음 터미널에서 개별 명령으로 수동으로 실행할 수도 있습니다.
  • UniqueID를 501에서 모든 시스템에서 안전한 것으로 알고있는 숫자로 수정하십시오 (501은 Mac에서 생성 된 첫 번째 계정에서 가져 오며, 일반적으로 시스템에있는 사용자 수에 따라 550과 같은 것이 안전 할 것입니다) .
  • PrimaryGroupID가 80이면 관리자가 생성됩니다. 기본 그룹 ID를 20으로 변경하여 표준 사용자를 작성하십시오.
  • 나는 이런 식으로 50 개가 넘는 Mac을 아무 문제없이 이미징했습니다. 이 계정을 사용하여 SSH를 통해 명령을 실행하고, ARD를 통해 패치를 푸시하고 로컬 데스크 사이드 관리를 수행합니다.

유망한 것 같습니다-곧 테스트 할 것입니다!
bmike

변수를 스크립트에 전달하여 일반 사용자를 만들기 위해이 스크립트를 시도하고 적용 할 때 발생하는 문제는 마지막 줄을 제외한 모든 것이 잘 작동한다는 것입니다. 즉, dscl은 사용자를 생성하고 dscl을 사용할 때 생성합니다. / users를 나열하면 사용자가 잘 표시되지만 chown은 사용자를 인식하지 못하며 홈 디렉토리 권한을 올바르게 변경할 수 없으므로 해당 사용자가 로그인 할 수 없습니다. 어떤 아이디어?

할 수 있으면 좋겠다. 쉘 스크립팅과 관련하여 내 약점 중 하나는 변수 사용법을 잘 배운 적이 없다는 것입니다. 주로 직장 에서이 시점에서 실제로 변수를 사용할 필요가 없기 때문입니다. @bmike 또는 다른 사람이 조언을 제공 할 수 있습니다.
bispymusic

@HackintoshCoat 스크립트를 게시 할 수 있습니까? 명령에서 실제로 "/ Users"인 경우 소문자 "/ users"를 입력했습니다. 나는 그것이 당신의 스크립트에 문제가 있는지 의심합니다; 그러나 신선한 눈으로 확인하면 문제를 상당히 빨리 찾을 수 있습니다. 실제로 여러 사용자를 설정하는 비슷한 스크립트가 있으므로 변수 자체의 사용법은 문제가되지 않습니다.
Kent

2
마지막 두 줄 ( cp -R ...; chown -R ...) 대신 명령을 사용할 수 있습니다 createhomedir -u administrator. createhomedir맨 페이지도 있습니다.
Alex Leach

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

0

다음은 명령 행을 사용하여 Max OS X에서 새 사용자를 추가하기 위해 작성한 쉘 스크립트입니다. 마치 리눅스와 동일하게 작동합니다. 개인적인 필요에 따라 자유롭게 편집하십시오. useradd.sh라는 이름을 지정하고 올바른 권한을 설정하십시오 ( chmod 0700 useradd.sh필자의 경우). bispymusic, Alex Leach, Kent 에게 감사의 말을 합니다.

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))있지만 현재와 같은 방식으로 개선되었습니다.
Igor Voltaic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.