कमांड लाइन से एक नया उपयोगकर्ता बनाने के लिए क्या कदम आवश्यक हैं?


27

क्या आदेश (या स्क्रिप्ट) माउंटेन शेर पर एक पूरी तरह कार्यात्मक उपयोगकर्ता खाता बना सकते हैं, केवल टर्मिनल या ssh के माध्यम से कमांड लाइन से चल रहे हैं।

यह एक मौजूदा की तरह लग रहा जोड़ी का जवाब काम हो सकता है, लेकिन मैं अगर वहाँ एक छोटी स्क्रिप्ट या बनाने पूरी तरह कार्यात्मक उपयोगकर्ता माउंटेन शेर पर खातों के लिए उपकरण थे सोचा?

जवाबों:


33

यहां एक शेल स्क्रिप्ट है, जिसे मैंने नेटइनस्टॉल प्रक्रिया के भाग के रूप में संभालने के लिए काम पर लिखा था (इमेजिंग प्रक्रिया के दौरान स्वचालित रूप से स्थानीय व्यवस्थापक खाता बनाना)।

#!/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 के दौरान निष्पादित होता है, इसलिए यह रूट के रूप में चलता है, और इसे ठीक से काम करने के लिए रूट के रूप में चलाने की आवश्यकता होती है। आप पहली दो पंक्तियों को घटा सकते हैं, प्रत्येक बाद की पंक्ति की शुरुआत में एक "sudo" जोड़ सकते हैं, और मैन्युअल रूप से इन्हें टर्मिनल में अलग-अलग कमांड के रूप में चला सकते हैं।
  • यूनीकआईडी को 501 से एक नंबर पर संशोधित करें जो आपको पता होगा कि सभी प्रणालियों पर सुरक्षित है (501 को मैक पर बनाए गए पहले खाते द्वारा लिया जाता है, आम तौर पर 550 जैसा कुछ उच्चतर संभवतः सुरक्षित होगा, जो आपके सिस्टम पर आपके कितने उपयोगकर्ताओं पर निर्भर करता है) ।
  • 80 का प्रायमरीग्रुप एक एडमिन यूजर बनाता है। एक मानक उपयोगकर्ता बनाने के लिए 20 के प्राइमरीग्रुप में बदलें।
  • मैं 50 से अधिक macs के साथ अच्छी तरह से imaged है कोई समस्या नहीं है। मैं SSH के माध्यम से कमांड चलाने के लिए, ARD के माध्यम से पैच आउट करने और स्थानीय डेस्क-साइड प्रशासन करने के लिए इस खाते का उपयोग करता हूं।

होनहार लगता है - जल्द ही इसका परीक्षण करेंगे!
bmike

समस्या यह है कि जब मैं कोशिश करता हूं और इस स्क्रिप्ट को नियमित रूप से उपयोगकर्ता बनाने के लिए अनुकूलित करता हूं, तो स्क्रिप्ट के चर को पार करके यह होता है कि अंतिम पंक्ति को छोड़कर सब कुछ ठीक काम करता है। अर्थात्, dscl उपयोगकर्ता बनाता है, और जब मैं dscl का उपयोग करता हूं। सूची / उपयोगकर्ता, उपयोगकर्ता ठीक दिखाता है, लेकिन चाउने उपयोगकर्ता को पहचानता नहीं है, और जब से मैं होम निर्देशिका अनुमतियों को ठीक से नहीं बदल सकता, यह उस उपयोगकर्ता को लॉग इन नहीं करने देगा। कोई भी विचार?

काश मैं। शेल स्क्रिप्टिंग की बात करते समय मेरी एक कमजोरी यह है कि मैंने कभी भी वेरिएबल्स के उपयोग को अच्छी तरह से नहीं सीखा, ज्यादातर इसलिए कि मुझे वास्तव में अपनी नौकरी में इस बिंदु पर किसी भी चीज के लिए उपयोग करने की आवश्यकता नहीं है। शायद @bmike या कोई और सलाह देने में सक्षम हो सकता है।
bispymusic

क्या आप अपनी स्क्रिप्ट पोस्ट कर सकते हैं? आपके आदेश में, आपने "/ उपयोगकर्ता", जब यह वास्तव में "/ उपयोगकर्ता" है, तो आपने लोअरकेस टाइप किया है। मुझे संदेह है कि आपकी स्क्रिप्ट के साथ यह मुद्दा है; लेकिन, यह जाँचने वाली ताज़ा आँखें समस्या को काफी तेज़ी से खोजने में सक्षम हो सकती हैं। मुझे एक समान स्क्रिप्ट मिली है जो वास्तव में कई उपयोगकर्ताओं को सेट करती है, इसलिए चर का उपयोग स्वयं एक समस्या नहीं है।
कैंट

2
अंतिम दो लाइनों ( cp -R ...; chown -R ...) के बजाय , आप कमांड का उपयोग कर सकते हैं createhomedir -u administratorcreatehomedirएक आदमी पृष्ठ भी है।
एलेक्स लेच

14

इसे और अधिक स्वचालित करने के लिए, निम्न पंक्ति का उपयोग अगले "उपलब्ध" उपयोगकर्ता आईडी को प्राप्त करने के लिए किया जा सकता है यदि आप एक मैक पर चल रहे हैं जिसमें पहले से ही उपयोगकर्ता सेट हैं।

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

यह उपयोगकर्ता का प्राथमिक समूह आईडी सेट करता है। 80 का मतलब है एडमिन और 20 का मतलब है स्टाफ । और 20 पर सेट करने से उपयोगकर्ता मानक नहीं बनेगा। जब तक पहले आदेश का उल्लेख नहीं किया जाता है।


स्पष्ट करने के लिए, इनमें से कोई भी आदेश समान कार्य को पूरा करेगा?
मैक्सगैब्रिएल

मैं / कमांड्स / एडमिन को अप्वाइंट करते हुए पहला कमांड पसंद करता हूं ।
विपिन जोने सेप

0

यहाँ एक शेल स्क्रिप्ट है जिसे मैंने कमांड लाइन का उपयोग करके अधिकतम OS X में नए उपयोगकर्ताओं को जोड़ने के लिए लिखा था। काम करता है जैसे कि यह लिनक्स था। अपनी व्यक्तिगत आवश्यकताओं के लिए किसी को संपादित करने के लिए स्वतंत्र महसूस करें। बस इसे useradd.sh नाम दें और सही अनुमतियां ( chmod 0700 useradd.shमेरे मामले में) सेट करें । उनके योगदान के लिए bispymusic, एलेक्स लीच, केंट के लिए धन्यवाद ।

ओएस एक्स हाई सिएरा का परीक्षण किया

#!/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))लेकिन यह अभी बेहतर और अधिक स्पष्ट दिखता है जिस तरह से यह अभी है।
इगोर वोल्टेइक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.