Utwórz plik .sh, który ustawia nową nazwę użytkownika, nazwę hosta i hasło

9

Rozdaję maszynę wirtualną moim studentom na kurs programowania dla początkujących. Ze względu na szybkość, zamiast nakłaniać ich do zainstalowania Ubuntu od zera, planuję dać im w pełni skonfigurowany obraz, który mogą po prostu uruchomić.

Aby go skonfigurować, podałem mu ofiarną nazwę hosta, nazwę użytkownika i hasło. Jaki jest najczystszy sposób, aby to zmienić dla uczniów, gdy zaczynają działać?

Dotarłem do tej istoty , która ma pewne niewiarygodne postępy z nazwą hosta, ale nazwa użytkownika powstrzymuje mnie przed jej zmianą.

Chciałbym, aby był to jak najbardziej bezbolesny proces, jak ma się to zdarzyć w ich pierwszym laboratorium.

Całkiem możliwe, że powinienem przyjąć zupełnie inne podejście. Jestem otwarty na wszystkie sugestie.

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

zrzut ekranu przedstawiający postęp produkcji

Ben
źródło
1
Może się mylę, ale kiedykolwiek brałem expectudział w procesie interaktywnym i uczyniłem go nieinteraktywnym. Zasadniczo tworzenie skryptu o expectokreślonych wynikach i posiadanie odpowiedzi znanej już w skrypcie. Ben chce czekać na dane wejściowe użytkownika i na tej podstawie wykonać polecenie. To prawda, że ​​się mylę przynajmniej raz dziennie, więc może tak być.
Właściwie jestem dobry dla części, która wymaga wkładu użytkownika. Po zebraniu nazwy hosta i nazwy użytkownika są one przechowywane jako zmienne. Trochę kłopotliwe jest potem. Tj. Od komentarza w dół.
Ben
1
W tej metodzie są pewne wady. Po pierwsze, nie można zmienić ścieżki bieżących użytkowników, nie jest to możliwe. Monit bash nie jest aktualizowany, gdy zmienia się nazwa hosta, jest czytany tylko raz, gdy terminal jest otwarty. Możesz, exec bashale technicznie otworzy to zagnieżdżony terminal.
Aby rozwiązać problem z nazwą hosta, zastąpiłbym sedją czymś takim. sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts To zaktualizuje linię 127.0.1.1 i po prostu dołączy nowego hosta do tego, co tam jest. Opuści stary host na swoim miejscu, ale zgodnym jest, aby przypisać wiele hostów do jednego adresu IP. Zapobiegnie to nierozwiązywalnemu problemowi z drugą sudokomendą, zmieniając nazwę hosta.

Odpowiedzi:

8

Dlaczego nie użyć do tego instalacji OEM? Nie jest tak ładna, ale wykonuje zadanie. Jeśli chcesz pójść tą drogą, zobacz doskonałą odpowiedź izx na to pytanie: Jak wstępnie zainstalować Ubuntu dla kogoś (instalacja OEM)?

Zasadniczo system (przy pierwszym uruchomieniu) poprosi użytkownika o podanie szeregu informacji umożliwiających personalizację komputera. Obejmuje to język, lokalizację, nazwę użytkownika, nazwę hosta, hasło i tak dalej. Zasadniczo wszystko, co zwykle monituje komputer o instalację.

To jest dokładnie to, co zdjęcia są przeznaczone dla OEM i robią świetną robotę. Ponadto dasz swoim uczniom niewielki smak doświadczenia z instalacją Ubuntu. Chociaż instalacje Ubuntu nie są do końca bolesne. Prawdopodobnie możesz to zrobić na jednej lekcji i dać uczniom odrobinę pracy domowej, aby spersonalizować i poznać ich maszynę wirtualną. Ponadto partycjonowanie to bolesna zabawa!


Powrót do aktualnego problemu (i odpowiedź na twoje aktualne pytanie) .....

Spójrzmy na man usermodwyjaśnienie, co się dzieje:

UWAGI
   Musisz upewnić się, że podany użytkownik nie wykonuje żadnego
   przetwarza, gdy to polecenie jest wykonywane, jeśli numeryczne użytkownika
   ID użytkownika, nazwa użytkownika lub katalog domowy użytkownika
   zmienione. usermod sprawdza to w systemie Linux, ale sprawdza tylko, czy użytkownik jest
   zalogowany zgodnie z utmp na innych architekturach.

Zasadniczo oznacza to po prostu, że nie możemy zmienić identyfikatora użytkownika, jego nazwy użytkownika, katalogu domowego ani niczego w tym rodzaju, jeśli użytkownik jest zalogowany.

Możemy więc zrobić kilka fajnych rzeczy, aby skonfigurować to przy następnym uruchomieniu systemu. Zamiast skryptu wykonującego pracę, sprawimy, że skrypt utworzy kolejny skrypt do wykonywania wszystkich ciężkich operacji podnoszenia i manipulacji. Przykład tego:

# 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

Zasadniczo, robiąc to, „kolejkujesz” zdarzenia do uruchomienia przy następnym uruchomieniu systemu. Uruchomi się to zanim nastąpi zdarzenie użytkownika, więc system wykona te polecenia jako root. Dlatego benużytkownik nie będzie zalogowany, a system nie będzie narzekał.

Nadal może być konieczne dodanie do tego polecenia dodatkowych poleceń, aby umożliwić większą personalizację (np. Ustawienie faktycznej nazwy itp.). Jest to jednak opcjonalne i należy to zrobić tylko wtedy, gdy chcesz, aby miało to miejsce podczas skryptu instalacyjnego.

Chociaż dobrym pomysłem może być całkowite utworzenie nowego użytkownika dla studentów, a następnie utrzymanie istniejącego konta ofiarnego na miejscu. W ten sposób, jeśli coś się stanie, możesz wejść i naprawić / administrować ich maszyną, jeśli to konieczne. Oczywiście, jeśli dajesz swoim uczniom administratorom dostęp do ich maszyn wirtualnych, jest to rodzaj spornego punktu, ponieważ mogą oni równie dobrze usunąć użytkownika „instruktora”, ponieważ są studentami.

Kaz Wolfe
źródło
Chciałem zasugerować „zrób instalację OEM”, a potem znalazłem tę odpowiedź :-)
sudodus
Dzięki za odpowiedź na podstawowe pytanie, jak osiągnąć swój cel, zamierzam zainstalować wersję OEM.
Ben
0

Na ekranie logowania każ im nacisnąć ctrlaltF2i zalogować się benz poziomu terminala, który zostanie otwarty i uruchomiony

sudo passwd

I podaj im to samo hasło do roota, tj. Numer kursu, więc jeśli coś się zepsuje, możesz wejść i go naprawić. Następnie wyloguj się, wpisując exiti zaloguj się jako root przy użyciu nowego hasła roota i uruchom skrypt (być może będziesz musiał go zmodyfikować, aby zmienił benużytkownika, a nie roota).

Lub poproś, aby zalogowali się jako ben z terminala, naciskając ctrlaltF2(jak poprzednio) na ekranie logowania, a następnie uruchomili skrypt z tego miejsca. Może to zadziałać, ponieważ, jak wskazali Muru i Kaz Wolfe w poprzedniej odpowiedzi, użytkownik nie może uruchamiać żadnych procesów, a zalogowanie się przez terminal nie powinno uruchamiać żadnych procesów, takich jak Xlub Ubuntu-Desktop, lub innych procesów użytkownika, które przeszkadzają usermod. (Nie wiem, czy to działa, nie próbowałem, ale warto spróbować).

Thomas Bodrey
źródło