Buat .sh yang menetapkan nama pengguna, nama host, dan kata sandi baru

9

Saya mendistribusikan VM kepada siswa saya untuk kursus pemrograman pemula. Untuk kecepatan, alih-alih meminta mereka untuk menginstal Ubuntu dari awal, saya berencana untuk memberi mereka gambar yang sepenuhnya diatur yang dapat mereka jalankan.

Untuk mengaturnya, saya telah memberinya nama host, nama pengguna, dan kata sandi pengorbanan. Apa cara paling bersih untuk mengubahnya untuk para siswa ketika mereka bangun dan berlari?

Saya sudah sampai pada intisari ini , yang memiliki beberapa kemajuan yang tidak dapat diandalkan dengan nama host, tetapi nama pengguna menolak saya mengubahnya.

Saya ingin proses ini tidak menimbulkan rasa sakit karena ini seharusnya terjadi di lab pertama mereka.

Sangat mungkin bahwa ada pendekatan yang sama sekali berbeda yang harus saya ambil. Saya terbuka untuk semua saran.

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

tangkapan layar dari kemajuan output

Ben
sumber
1
Mungkin saya salah, tetapi saya hanya pernah menggunakan expectproses interaktif dan membuatnya non-interaktif. Pada dasarnya, membuat skrip expecttertentu menghasilkan dan memiliki respons yang sudah dikenal dalam skrip. Ben ingin menunggu input pengguna dan menjalankan perintah berdasarkan itu. Memang, saya salah setidaknya sekali sehari, jadi ini mungkin terjadi.
Sebenarnya, saya baik untuk bagian yang mengambil input pengguna. Setelah saya mengumpulkan nama host dan nama pengguna, mereka disimpan sebagai variabel. Bagian yang merepotkan adalah setelah itu. Yaitu dari komentar ke bawah.
Ben
1
Ada beberapa kekurangan dalam metode ini. Pertama, Anda tidak dapat mengubah jalur pengguna saat ini, itu tidak mungkin. Bash prompt tidak diperbarui ketika nama host berubah, itu hanya dibaca sekali ketika terminal dibuka. Anda bisa exec bashtetapi secara teknis akan membuka terminal bersarang.
Untuk memperbaiki masalah nama host Anda, saya akan mengganti Anda seddengan sesuatu seperti ini .. sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts Yang akan memperbarui baris 127.0.1.1, dan hanya menambahkan host baru untuk apa yang ada di sana. Ini akan meninggalkan host lama di tempatnya, tetapi memenuhi beberapa host yang ditugaskan untuk satu IP. Itu akan mencegah masalah yang tidak terselesaikan dengan sudoperintah Anda yang lain , mengubah nama host.

Jawaban:

8

Mengapa tidak menggunakan instalasi OEM saja untuk ini? Ini tidak cantik, tetapi menyelesaikan pekerjaan. Jika Anda ingin turun rute ini, lihat jawaban izx yang sangat baik untuk pertanyaan ini: Bagaimana cara pra-instal Ubuntu untuk seseorang (instalasi OEM)?

Pada dasarnya, sistem akan (pada boot pertama) meminta pengguna untuk banyak informasi untuk mempersonalisasi mesin mereka. Ini termasuk bahasa, lokasi, nama pengguna, nama host, kata sandi, dan sebagainya. Pada dasarnya, semua yang biasanya diminta oleh komputer Anda untuk instalasi.

Ini adalah persis apa gambar OEM dimaksudkan untuk, dan mereka melakukan pekerjaan yang besar itu. Plus, Anda akan memberi siswa Anda sedikit pengalaman "instal Ubuntu". Padahal, pemasangan Ubuntu tidak terlalu menyakitkan. Anda mungkin dapat melakukannya dalam satu kelas, dan memberi siswa Anda beberapa pekerjaan rumah untuk mempersonalisasi dan mengeksplorasi VM mereka. Plus, mempartisi itu menyenangkan dan menyakitkan !


Kembali ke masalah yang ada (dan jawaban untuk pertanyaan Anda yang sebenarnya ) .....

Mari kita lihat man usermoduntuk mendapatkan penjelasan tentang apa yang terjadi:

CAVEAT
   Anda harus memastikan bahwa pengguna yang disebutkan tidak menjalankan apa pun
   proses ketika perintah ini dieksekusi jika pengguna numerik
   ID pengguna, nama pengguna, atau direktori home pengguna sedang
   berubah. usermod memeriksa ini di Linux, tetapi hanya memeriksa apakah pengguna
   masuk menurut utmp pada arsitektur lain.

Pada dasarnya, ini hanya berarti kita tidak dapat mengubah UID pengguna, nama pengguna, direktori home mereka, atau semacamnya jika pengguna tersebut login.

Jadi, kita dapat melakukan beberapa hal menyenangkan untuk mengatur ini pada boot sistem berikutnya. Alih-alih skrip Anda melakukan pekerjaan, kami membuat skrip Anda membuat skrip lain untuk melakukan semua pengangkatan dan manipulasi yang berat. Contoh dari ini:

# 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

Pada dasarnya, dengan melakukan ini, Anda sedang "mengantri" acara untuk dijalankan pada boot sistem berikutnya. Ini akan berjalan sebelum userland terjadi, sehingga sistem akan menjalankan perintah ini sebagai root. Oleh karena itu, benpengguna tidak akan masuk, dan sistem tidak akan mengeluh.

Anda mungkin masih perlu menambahkan perintah tambahan untuk hal ini untuk memungkinkan lebih banyak personalisasi (seperti mengatur nama sebenarnya, dll). Namun, ini opsional dan hanya perlu dilakukan jika Anda ingin itu berlangsung selama skrip pengaturan.

Padahal, mungkin ide yang bagus untuk hanya membuat pengguna baru untuk siswa sepenuhnya, dan kemudian menjaga akun pengorbanan Anda yang ada di tempat. Dengan cara ini, jika terjadi sesuatu, Anda dapat masuk dan memperbaiki / mengatur mesin mereka jika diperlukan. Tentu saja, jika Anda memberi siswa Anda akses admin ke VM mereka, ini semacam titik diperdebatkan karena mereka mungkin sangat menghapus pengguna "instruktur" karena mereka mahasiswa.

Kaz Wolfe
sumber
Saya bermaksud menyarankan 'membuat instalasi OEM', dan kemudian saya menemukan jawaban ini :-)
sudodus
Terima kasih telah menjawab pertanyaan root tentang cara mencapai tujuan saya, saya akan menggunakan instalasi OEM.
Ben
0

Pada layar login, minta mereka menekan ctrlaltF2dan login bendari terminal yang terbuka dan berjalan

sudo passwd

Dan berikan mereka semua kata sandi yang sama untuk root, yaitu, nomor kursus, jadi jika ada yang rusak, Anda bisa masuk dan memperbaikinya. Kemudian minta mereka keluar dengan mengetik exit, dan masuk sebagai root dengan kata sandi root baru mereka dan jalankan skrip (Anda mungkin harus memodifikasinya sehingga mengubah benpengguna dan bukan root).

Atau, minta mereka masuk sebagai ben dari terminal dengan menekan ctrlaltF2(seperti sebelumnya) di layar masuk dan minta mereka kemudian menjalankan skrip dari sana. Ini bisa berfungsi karena seperti yang ditunjukkan Muru dan Kaz Wolfe dalam jawaban sebelumnya, pengguna tidak dapat menjalankan proses apa pun, dan masuk melalui terminal tidak boleh memulai proses apa pun, seperti Xatau Ubuntu-Desktop, atau proses lahan pengguna lain yang mengganggu usermod. (Saya tidak tahu apakah ini berhasil, saya belum mencobanya, tetapi patut dicoba).

Thomas Bodrey
sumber