Створіть .sh, який встановлює нове ім’я користувача, ім’я хосту та пароль


9

Я розповсюджую VM студентам для курсу програмування для початківців. Для швидкості, замість того, щоб змусити їх встановити Ubuntu з нуля, я планую дати їм повністю налаштоване зображення, яке вони можуть просто запустити.

Для того, щоб налаштувати його, я дав йому жертовне ім’я хоста, ім’я користувача та пароль. Який найчистіший спосіб змінити це для учнів, коли вони встають і працюють?

У мене є ця суть , яка має деякий ненадійний прогрес щодо імені хоста, але ім’я користувача чинить опір мені змінити його.

Мені б хотілося, щоб це був максимально безболісний процес, оскільки це повинно відбуватися в їхній першій лабораторії.

Цілком можливо, що я повинен застосувати зовсім інший підхід. Я відкритий до всіх пропозицій.

#!/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- admin-magazine.com/Articles/Automating-with-Expect-Scripts
Panther

1
Можливо, я помиляюся, але я колись коли-небудь використовував expectінтерактивний процес і робив його неінтерактивним. В основному, створення сценарію, який expectпевний вихід, і відповідь, яка вже відома в сценарії. Бен хоче дочекатися введення користувача та виконати на його основі команду. Зрозуміло, я помиляюся хоча б раз на день, тому це може бути так.

Насправді я хороший за ту частину, яка займає введення користувача. Після того як я зібрав ім'я хоста та ім’я користувача, вони зберігаються як змінні. Біт, який турбує, це після цього. Тобто від коментаря вниз.
Бен

1
У цього методу є деякі недоліки. По-перше, ви не можете змінити поточний шлях користувачів, це неможливо. Підказка bash не оновлюється при зміні імені хоста, його читають лише один раз, коли термінал відкрито. Ви можете, exec bashале це технічно відкриє вкладений термінал.

Щоб виправити проблему з вашим іменем хоста, я замінив би ваше sedна щось подібне. sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts Це оновить рядок 127.0.1.1 і просто додасть новий хост до того, що там є. Він залишить старий хост на місці, але він сумісний із тим, що одному хосту призначено кілька хостів. Це дозволить уникнути нерозв’язної проблеми з вашою іншою sudoкомандою, змінивши ім'я хоста.

Відповіді:


8

Чому б просто не використовувати для цього встановлення OEM? Це не так гарно, але це робить роботу. Якщо ви хочете піти цією трасою, див. Відмінну відповідь izx на це запитання: Як мені попередньо встановити Ubuntu для когось (встановлення OEM)?

В основному система (при першому завантаженні) підкаже користувачеві купу інформації, щоб персоналізувати свою машину. Сюди входить мова, місцезнаходження, ім’я користувача, ім'я хоста, пароль тощо. В основному, все, що ваш комп'ютер, як правило, запропонує встановити.

Це саме те , що зображення OEM призначені для, і вони роблять велику роботу його. Крім того, ви дасте своїм учням невеликий смак досвіду "встановити Ubuntu". Хоча встановлення Ubuntu не дуже болісне. Ви, ймовірно, можете це зробити в одному класі та дати учням домашнє завдання, щоб вони персоналізували та досліджували їхню машину. Плюс розділення - це болісно весело!


Повертаємось до проблеми, що знаходиться під рукою (і відповіді на власне запитання) ...

Давайте розглянемо, man usermodщоб отримати пояснення того, що відбувається:

ПЕРЕГЛЯД
   Ви повинні переконатися, що названий користувач не виконує жодного
   обробляє, коли ця команда виконується, якщо користувач чисельний
   ідентифікатор користувача, ім'я користувача або домашній каталог користувача
   змінився. usermod перевіряє це в Linux, але лише перевіряє, чи є користувач
   увійшли згідно з utmp для інших архітектур.

В основному, це просто означає, що ми не можемо змінити UID користувача, його ім’я користувача, домашній каталог або щось подібне, якщо користувач увійшов у систему.

Отже, ми можемо зробити деякі цікаві речі, щоб налаштувати це на наступному завантаженні системи. Замість того, щоб ваш сценарій виконував роботу, ми змушуємо ваш сценарій зробити ще один сценарій, щоб зробити всі важкі підйоми та маніпуляції. Приклад цього:

# 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

В основному, роблячи це, ви "чергуєте" події для запуску в наступному завантаженні системи. Це запуститься до того, як трапиться поле користувача, тому система виконає ці команди як root. Тому benкористувач не буде входити в систему, і система не скаржиться.

Вам може знадобитися додати додаткові команди до цієї речі, щоб дозволити більше персоналізації (наприклад, встановлення фактичного імені тощо). Однак це необов’язково, і це потрібно робити лише в тому випадку, якщо ви хочете, щоб це відбувалося під час налаштування сценарію.

Хоча, може бути гарною ідеєю просто створити нового користувача для студентів цілком, а потім зберегти свій наявний жертовний рахунок. Таким чином, якщо щось трапиться, ви можете зайти і виправити / адмініструвати їхню машину, якщо взагалі потрібно. Звичайно, якщо ви даєте своїм студентам адміністратор доступу до своїх віртуальних машин, це своєрідна суперечка, оскільки вони можуть дуже добре видалити користувача "інструктора", оскільки вони є студентами.


Я мав намір запропонувати "зробити встановлення OEM", і тоді я знайшов цю відповідь :-)
sudodus

Дякую за відповідь на основне запитання, як досягти своєї мети, я збираюся розпочати встановлення OEM.
Бен

0

На екрані входу дозвольте їм натискати ctrlaltF2та входити benз терміналу, який відкривається та працює

sudo passwd

І дайте їм все той же пароль для root, тобто номер курсу, тому якщо щось зламається, ви можете зайти і виправити його. Потім exitувімкніть їх, ввівши та увійдіть як root з новим паролем root та запустіть скрипт (можливо, вам доведеться його змінити, щоб він міняв benкористувача, а не root).

Або дозвольте їм увійти як бен з терміналу, натиснувши ctrlaltF2(як і раніше) на екрані входу, а потім запустити сценарій звідти. Це може працювати , тому що , як Мура і Kaz Wolfe вказали в попередній відповіді, користувач може не бути запущений якими - або процеси, і зайшли через термінал не повинен запускати будь-які процеси, такі як Xабо Ubuntu-Desktop, або інші процеси , які заважають призначені для користувача з usermod. (Не знаю, чи працює це, я не пробував, але варто спробувати).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.