Yeni kullanıcı adı, ana bilgisayar adı ve şifre ayarlayan bir .sh dosyası oluşturun


9

Yeni başlayanlara yönelik bir programlama kursu için öğrencilerime bir VM dağıtıyorum. Hız için, Ubuntu'yu sıfırdan yüklemelerini sağlamak yerine, sadece çalışabilecekleri tamamen ayarlanmış bir görüntü vermeyi planlıyorum.

Kurmak için kurban bir ana bilgisayar adı, kullanıcı adı ve şifre verdim. Öğrenciler çalışmaya başladıklarında bunu değiştirmenin en temiz yolu nedir?

Ana bilgisayar adında güvenilir olmayan bir ilerleme kaydeden bu özü buldum , ancak kullanıcı adı değiştirmeme karşı direniyor.

Bunun ilk laboratuvarlarında olması gerektiği gibi olabildiğince acısız bir süreç olmasını istiyorum.

Tamamen farklı bir yaklaşım benim olmalıydı. Tüm önerilere açığım.

#!/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

çıktı ilerleme ekran görüntüsü



1
Belki yanılıyorum, ama sadece expectetkileşimli bir süreç alıp etkileşimli yapmıyordum. Temel olarak, expectbelirli bir çıktısı olan bir komut dosyası yapmak ve yanıtı komut dosyasında zaten bildiğiniz. Ben kullanıcı girişini beklemek ve buna dayalı bir komut çalıştırmak istiyor. Verilen, günde en az bir kez yanılıyorum, bu yüzden durum böyle olabilir.

Aslında, kullanıcı girdisi alan kısım için iyiyim. Ana bilgisayar adı ve kullanıcı adını topladıktan sonra, değişken olarak saklanırlar. Sorun yaratan kısım bundan sonra. Yani yorumdan aşağı.
Ben

1
Bu yöntemde bazı kusurlar var. Birincisi, mevcut kullanıcıların yolunu değiştiremezsiniz, bu mümkün değildir. Ana bilgisayar adı değiştiğinde bash istemi güncellenmez, terminal açıldığında yalnızca bir kez okunur. Yapabilirsiniz exec bashama teknik olarak iç içe bir terminal açacaktır.

Ana bilgisayar adı sorununuzu düzeltmek için, bunun sedgibi bir şeyle değiştiririm. sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts 127.0.1.1 satırını güncelleyecek ve yeni ana bilgisayarı orada olanlara ekleyeceğiz. Eski ana bilgisayarı yerinde bırakacak, ancak bir IP'ye birden fazla ana makinenin atanması uyumludur. Bu, diğer sudokomutunuzda çözülemeyen sorunu önleyerek ana makine adını değiştirir.

Yanıtlar:


8

Neden bunun için sadece bir OEM kurulumu kullanmıyorsunuz? O kadar güzel değil, ama işi hallediyor. Bu rotaya gitmek istiyorsanız, izx'in bu soruya vereceği mükemmel cevaba bakın: Birisi için Ubuntu'yu nasıl önceden yükleyebilirim (OEM kurulumu)?

Temel olarak, sistem (ilk önyüklemede) kullanıcıdan makinelerini kişiselleştirmek için bir grup bilgi isteyecektir. Buna dil, yer, kullanıcı adı, ana bilgisayar adı, şifre vb. Dahildir. Temel olarak, bilgisayarınızın genellikle bir kurulum için isteyeceği her şey.

Bu, OEM görüntülerinin tam olarak ne anlama geldiğini ve bunun büyük bir işini yapıyorlar. Ayrıca, öğrencilerinize "Install Ubuntu" deneyiminin küçük bir tadını vereceksiniz. Yine de, Ubuntu yüklemeleri tam olarak acı verici değildir. Muhtemelen tek bir sınıfta yapabilir ve öğrencilerinize sanal makinelerini kişiselleştirmek ve keşfetmek için bazı ödevler verebilirsiniz. Ayrıca, bölümleme acı verici eğlenceli!


Eldeki soruna geri dönün (ve asıl sorunuzun cevabı ) .....

man usermodNeler olup bittiğine dair bir açıklama almaya bakalım :

YETERSİZLİKLER
   Adı belirtilen kullanıcının herhangi bir işlem yapmadığından emin olmalısınız
   Kullanıcının sayısal değeri varsa, bu komut yürütüldüğünde işler
   kullanıcı kimliği, kullanıcının adı veya kullanıcının ana dizini
   değişti. usermod bunu Linux'ta kontrol eder, ancak yalnızca kullanıcının
   diğer mimarilerde utmp'a göre giriş yaptık.

Temel olarak, bu sadece bir kullanıcının UID'sini, kullanıcı adını, ana dizinini veya kullanıcı giriş yaptıysa bu tür bir şeyi değiştiremeyeceğimiz anlamına gelir.

Yani, bunu sistemin bir sonraki önyüklemesinde ayarlamak için bazı eğlenceli şeyler yapabiliriz. Senaryonun işi yapması yerine, senaryonuzun tüm ağır kaldırma ve manipülasyonu yapmak için başka bir senaryo yapmasını sağlıyoruz. Buna bir örnek:

# 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

Temel olarak, bunu yaparak, sistemin bir sonraki önyüklemesinde çalıştırılacak olayları "sıraya koyarsınız". Bu kullanıcı alanı gerçekleşmeden önce çalışır, böylece sistem bu komutları root olarak yürütür. Bu nedenle, benkullanıcı oturum açmaz ve sistem şikayet etmez.

Daha fazla kişiselleştirmeye izin vermek için bu öğeye ek komutlar eklemeniz gerekebilir (gerçek adı ayarlamak vb. Gibi). Ancak, bu isteğe bağlıdır ve yalnızca kurulum betiği sırasında gerçekleşmesini istiyorsanız yapılması gerekir.

Yine de, öğrenciler için tamamen yeni bir kullanıcı oluşturmak ve daha sonra mevcut kurban hesabınızı yerinde tutmak iyi bir fikir olabilir. Bu şekilde, bir şey olursa, içeri girebilir ve gerekirse makinelerini onarabilir / yönetebilirsiniz. Elbette, öğrencilerinize sanal makinelerine yönetici erişimi veriyorsanız, "eğitmen" kullanıcısını çok iyi silebilecekleri için bu bir tür tartışma noktasıdır.


Ben 'OEM kurulum yapmak' önermek istedim ve sonra bu cevabı buldum :-)
sudodus

Sonumun nasıl elde edileceğine dair kök soruyu cevapladığınız için teşekkürler, OEM kurulumuyla gideceğim.
Ben

0

Oturum açma ekranında, açılan ve çalışan terminalden olduğu ctrlaltF2gibi basmalarını ve oturum açmalarını bensağlayın

sudo passwd

Ve onlara kök için aynı şifreyi, yani kurs numarasını verin, böylece bir şey kırılırsa, girip düzeltebilirsiniz. Daha sonra yazarak exitoturumu kapatın ve yeni kök parolalarıyla kök olarak oturum açın ve komut dosyasını çalıştırın (root'u bendeğil kullanıcıyı değiştirecek şekilde değiştirmeniz gerekebilir ).

Veya ctrlaltF2giriş ekranında (daha önce olduğu gibi) tuşuna basarak terminalden ben olarak giriş yapmalarını ve komut dosyasını oradan çalıştırmalarını sağlayın. Olarak, çünkü bu işe yarayabilir Muru ve Kaz Wolfe önceki yanıtta işaret, kullanıcının herhangi bir süreç çalışan ve terminal gibi herhangi süreçleri başlatmak olmamalı üzerinden oturum edilemez Xveya Ubuntu-Desktopmüdahale veya başka userland süreçler usermod. (Bunun işe yarayıp yaramadığını bilmiyorum, denemedim, ama denemeye değer).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.