नया-नया यूजरनाम, होस्टनाम और पासवर्ड सेट करें


9

मैं अपने छात्रों को शुरुआती प्रोग्रामिंग कोर्स के लिए एक वीएम वितरित कर रहा हूं। गति के लिए, उन्हें खरोंच से उबंटू स्थापित करने के लिए प्राप्त करने के बजाय, मैं उन्हें पूरी तरह से सेट की गई छवि देने की योजना बना रहा हूं जो वे बस चला सकते हैं।

इसे स्थापित करने के लिए मैंने इसे एक होस्टनाम, उपयोगकर्ता नाम और पासवर्ड दिया है। जब वे उठते हैं और दौड़ते हैं तो छात्रों के लिए इसे बदलने का सबसे साफ तरीका क्या है?

मुझे इस जिस्ट के रूप में मिला है , जिसमें होस्टनाम के साथ कुछ अविश्वसनीय प्रगति है, लेकिन उपयोगकर्ता नाम मुझे बदलने का विरोध कर रहा है।

मुझे यह पसंद है कि जितना संभव हो उतना दर्द रहित प्रक्रिया हो क्योंकि यह उनकी पहली लैब में होना चाहिए।

यह पूरी तरह से संभव है कि एक पूरी तरह से अलग दृष्टिकोण है जिसे मुझे लेना चाहिए। मैं सभी सुझावों के लिए तैयार हूं।

#!/bin/bash
clear
toilet  "     CODE1161     "  --metal --font future
echo    ""
toilet  "Let's get started!"  --metal --font future
echo    ""
echo    "We need to make this computer be YOURS"
echo    "We need a name for you and your computer, make it short or it'll take up a lot of space."
echo    "My computer is called um and my name is ben, so I get ben@um:~$ as my command prompt."
echo    ""
read -p "Enter a name for your computer:"  compname
read -p "Enter your name: "  username
echo    ""
toilet  "$username@$compname~$"  --gay --font wideterm
echo    ""
echo    "What do you think? If you hate it, press ctrl+c and do this again"
read -p "otherwise, just press enter." sacrificial

# set the host name, in a million places, for some unknown reason.
echo "1"
sed -i "/127\.0\.1\.1\s*vc/ { c \
127.0.1.1   $compname
}" /etc/hosts
echo "2"
sudo hostname -b $compname
echo "3"
sudo hostnamectl set-hostname $compname
echo "4"
sudo groupadd $username
echo "5"
sudo usermod -d /home/$username -m -g $username -l $username ben

आउटपुट प्रगति का एक स्क्रीन शॉट



1
शायद मैं गलत हूं, लेकिन मैंने केवल expectएक इंटरैक्टिव प्रक्रिया लेने और इसे गैर-इंटरैक्टिव बनाने के लिए उपयोग किया है। मूल रूप से, एक स्क्रिप्ट बनाना जो expectकुछ आउटपुट और स्क्रिप्ट में पहले से ज्ञात प्रतिक्रिया हो। बेन उपयोगकर्ता इनपुट का इंतजार करना चाहता है और इसके आधार पर एक कमांड निष्पादित करता है। दी, मैं दिन में कम से कम एक बार गलत हूं, इसलिए ऐसा हो सकता है।

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

1
इस पद्धति में कुछ खामियां हैं। एक, आप वर्तमान उपयोगकर्ता पथ को बदल नहीं सकते, यह संभव नहीं है। होस्टनाम बदलने पर, बैश प्रॉम्प्ट अपडेट नहीं किया जाता है, यह केवल एक बार पढ़ा जाता है जब टर्मिनल खोला जाता है। आप कर सकते हैं exec bashलेकिन यह तकनीकी रूप से एक नेस्टेड टर्मिनल खोल देगा।

आपके होस्टनाम मुद्दे को ठीक करने के लिए, मैं आपकी जगह sedकुछ इस तरह से sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts दूंगा .. जो कि 127.0.1.1 लाइन को अपडेट करेगा, और नए होस्ट को केवल वही करेगा जो वहाँ है। यह पुराने होस्ट को जगह में छोड़ देगा, लेकिन कई होस्ट को एक आईपी को सौंपा जाना अनिवार्य है। sudoहोस्टनाम को बदलते हुए आपके अन्य आदेश के साथ अनार्य समस्या को रोका जा सकेगा ।

जवाबों:


8

इसके लिए सिर्फ ओईएम इंस्टॉलेशन का उपयोग क्यों नहीं किया जाता? यह उतना सुंदर नहीं है, लेकिन इससे काम हो जाता है। यदि आप इस मार्ग से नीचे जाना चाहते हैं, तो इस प्रश्न का उत्कृष्ट उत्तर देखें: मैं किसी (ओईएम) के लिए उबंटू को पूर्व-स्थापित कैसे कर सकता हूं?

असल में, सिस्टम (पहले बूट पर) उपयोगकर्ता को अपनी मशीन को निजीकृत करने के लिए सूचना के एक समूह के लिए संकेत देगा। इसमें भाषा, स्थान, उपयोगकर्ता नाम, होस्टनाम, पासवर्ड इत्यादि शामिल हैं। मूल रूप से, वह सब कुछ जो आपका कंप्यूटर आमतौर पर इंस्टॉलेशन के लिए आपको संकेत देगा।

यह वही है जो ओईएम छवियों के लिए है, और वे इसका एक बड़ा काम करते हैं। साथ ही, आप अपने छात्रों को "स्थापित उबंटू" अनुभव का एक छोटा सा स्वाद देंगे। हालाँकि, Ubuntu स्थापित बिल्कुल दर्दनाक नहीं हैं। आप शायद इसे एक ही कक्षा में कर सकते हैं, और अपने छात्रों को अपने वीएम को निजीकृत और एक्सप्लोर करने के लिए कुछ होमवर्क दे सकते हैं। इसके अलावा, विभाजन दर्दनाक मज़ा है!


समस्या पर वापस हाथ में (और आपके वास्तविक प्रश्न का उत्तर ) .....

आइए देखें man usermodकि क्या हो रहा है:

चेतावनियां
   आपको यह निश्चित करना चाहिए कि नामित उपयोगकर्ता कोई भी निष्पादित नहीं कर रहा है
   उपयोगकर्ता के संख्यात्मक होने पर इस कमांड को क्रियान्वित किया जाता है
   उपयोगकर्ता आईडी, उपयोगकर्ता का नाम, या उपयोगकर्ता की होम निर्देशिका
   बदला हुआ। usermod लिनक्स पर यह जाँच करता है, लेकिन केवल यह जाँचें कि उपयोगकर्ता है
   अन्य आर्किटेक्चर पर utmp के अनुसार लॉग इन किया।

मूल रूप से, इसका मतलब है कि हम उपयोगकर्ता के यूआईडी, उनके उपयोगकर्ता नाम, होम डायरेक्टरी, या उपयोगकर्ता द्वारा लॉग इन करने पर किसी भी प्रकार को बदल नहीं सकते हैं।

इसलिए, हम सिस्टम के अगले बूट पर इसे सेट करने के लिए कुछ मजेदार चीजें कर सकते हैं। आपकी स्क्रिप्ट काम करने के बजाय, हम आपकी स्क्रिप्ट को एक और स्क्रिप्ट बनाते हैं जो सभी भारी उठाने और हेरफेर करने के लिए है। इसका एक उदाहरण:

# Make the first-run script
touch /etc/init.d/firstrun-setup.sh

# Add in user modifier
echo "usermod -d /home/$username -m -g $username -l $username ben" >> /etc/init.d/firstrun-setup.sh

# Add in group rename
echo "groupmod -n $username ben" >> /etc/init.d/firstrun-setup.sh

# Add in password expiry
echo "passwd -e $username" >> /etc/init.d/firstrun-setup.sh

# Add in file self-destruct
echo "rm /etc/init.d/firstrun-setup.sh" >> /etc/init.d/firstrun-setup.sh

# Mark the file as executable
chmod a+x /etc/init.d/firstrun-setup.sh

# Reboot the computer
reboot

मूल रूप से, ऐसा करने से, आप सिस्टम के अगले बूट पर चलने के लिए "कतारबद्ध" घटनाएं कर रहे हैं। उपयोगकर्ता के होने से पहले यह चलेगा, इसलिए सिस्टम इन कमांड को रूट के रूप में निष्पादित करेगा। इसलिए, benउपयोगकर्ता लॉग इन नहीं होगा, और सिस्टम शिकायत नहीं करेगा।

अधिक वैयक्तिकरण (जैसे वास्तविक नाम सेट करना, आदि) की अनुमति देने के लिए आपको इस चीज़ में अतिरिक्त कमांड जोड़ने की आवश्यकता हो सकती है। हालाँकि, यह वैकल्पिक है और इसे केवल तभी करना चाहिए जब आप इसे सेटअप स्क्रिप्ट के दौरान रखना चाहते हैं।

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


मेरा सुझाव है कि 'एक ओईएम इंस्टॉलेशन बनाने' का सुझाव दिया जाए, और फिर मुझे यह उत्तर मिला :-)
सुडोकू

अपने अंत को प्राप्त करने के तरीके के मूल प्रश्न का उत्तर देने के लिए धन्यवाद, मैं एक ओईएम स्थापित करने जा रहा हूं।
बेन

0

लॉगिन स्क्रीन पर, उन्हें खोलने और चलाने वाले टर्मिनल से प्रेस ctrlaltF2और लॉगिन करेंben

sudo passwd

और उन्हें रूट, अर्थात, कोर्स नंबर के लिए एक ही पासवर्ड दें, ताकि अगर कुछ टूट जाए, तो आप इसे ठीक कर सकते हैं। फिर उन्हें टाइप करके लॉग आउट करें exit, और अपने नए रूट पासवर्ड के साथ रूट के रूप में लॉग इन करें और स्क्रिप्ट चलाएं (आपको इसे संशोधित करना पड़ सकता है ताकि यह benउपयोगकर्ता को बदल दे और रूट नहीं हो)।

या, उन्हें ctrlaltF2लॉगिन स्क्रीन पर दबाकर (पहले की तरह) टर्मिनल से बेन के रूप में लॉग इन किया है और फिर स्क्रिप्ट को वहां से चलाएं। यह काम कर सकता है, क्योंकि Muru और Kaz वोल्फ पिछले जवाब में बताया, उपयोगकर्ता किसी भी चल रही प्रक्रियाओं नहीं किया जा सकता है, और में के माध्यम से टर्मिनल में इस तरह के रूप में किसी भी प्रक्रियाओं, शुरू नहीं करना चाहिए प्रवेश करने Xया Ubuntu-Desktop, या अन्य userland प्रक्रियाओं है कि के साथ हस्तक्षेप usermod। (मुझे नहीं पता कि यह काम करता है, मैंने इसकी कोशिश नहीं की है, लेकिन यह एक कोशिश के लायक है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.