Tạo một .sh đặt tên người dùng, tên máy chủ và mật khẩu mới


9

Tôi đang phân phối VM cho các sinh viên của mình cho một khóa học lập trình cho người mới bắt đầu. Về tốc độ, thay vì bắt họ cài đặt Ubuntu từ đầu, tôi dự định cung cấp cho họ một hình ảnh được thiết lập đầy đủ mà họ có thể chạy.

Để thiết lập nó, tôi đã đặt cho nó một tên máy chủ, tên người dùng và mật khẩu. Cách sạch nhất để thay đổi điều này cho các sinh viên khi họ đứng dậy và chạy?

Tôi đã đi xa như ý chính này , có một số tiến bộ không đáng tin cậy với tên máy chủ, nhưng tên người dùng đang chống lại tôi thay đổi nó.

Tôi muốn nó là một quá trình không đau đớn nhất có thể vì điều này được cho là xảy ra trong phòng thí nghiệm đầu tiên của họ.

Hoàn toàn có thể có một cách tiếp cận hoàn toàn khác mà tôi nên thực hiện. Tôi mở tất cả các đề xuất.

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

một ảnh chụp màn hình của tiến trình đầu ra



1
Có thể tôi sai, nhưng tôi chỉ từng expectthực hiện một quy trình tương tác và làm cho nó không tương tác. Về cơ bản, tạo một tập lệnh mà expectđầu ra nhất định và có phản hồi đã được biết đến trong tập lệnh. Ben muốn đợi người dùng nhập liệu và thực hiện một lệnh dựa trên nó. Cấp, tôi sai ít nhất một lần một ngày, vì vậy đây có thể là trường hợp.

Trên thực tế, tôi tốt cho phần lấy đầu vào của người dùng. Khi tôi đã thu thập tên máy chủ và tên người dùng, chúng được lưu trữ dưới dạng các biến. Điều đó thật rắc rối là sau đó. Tức là từ bình luận xuống.
Ben

1
Có một số sai sót trong phương pháp này. Thứ nhất, bạn không thể thay đổi đường dẫn người dùng hiện tại, điều đó là không thể. Dấu nhắc bash không được cập nhật khi tên máy chủ thay đổi, nó chỉ được đọc một lần khi thiết bị đầu cuối được mở. Bạn có thể exec bashnhưng về mặt kỹ thuật nó sẽ mở ra một thiết bị đầu cuối lồng nhau.

Để khắc phục sự cố tên máy chủ của bạn, tôi sẽ thay thế bạn sedbằng một cái gì đó như thế này .. sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts Nó sẽ cập nhật dòng 127.0.1.1 và chỉ nối thêm máy chủ mới vào những gì ở đó. Nó sẽ để máy chủ cũ vào vị trí, nhưng nó tuân thủ để có nhiều máy chủ được gán cho một IP. Điều đó sẽ ngăn vấn đề không thể giải quyết được với sudolệnh khác của bạn , thay đổi tên máy chủ.

Câu trả lời:


8

Tại sao không sử dụng cài đặt OEM cho việc này? Nó không đẹp bằng, nhưng nó hoàn thành công việc. Nếu bạn muốn đi theo tuyến đường này, hãy xem câu trả lời tuyệt vời của izx cho câu hỏi này: Làm cách nào để tôi cài đặt sẵn Ubuntu cho ai đó (cài đặt OEM)?

Về cơ bản, hệ thống sẽ (trong lần khởi động đầu tiên) sẽ nhắc người dùng về một loạt thông tin để cá nhân hóa máy của họ. Điều này bao gồm ngôn ngữ, vị trí, tên người dùng, tên máy chủ, mật khẩu, v.v. Về cơ bản, mọi thứ mà máy tính của bạn thường sẽ nhắc bạn cài đặt.

Đây chính xác là ý nghĩa của hình ảnh OEM và chúng làm rất tốt công việc này. Ngoài ra, bạn sẽ cho học sinh của mình trải nghiệm nhỏ về trải nghiệm "cài đặt Ubuntu". Mặc dù vậy, Ubuntu cài đặt không thực sự đau đớn. Bạn có thể có thể làm điều đó trong một lớp duy nhất và cho học sinh của bạn một số bài tập về nhà để cá nhân hóa và khám phá VM của chúng. Thêm vào đó, phân vùng là niềm vui đau đớn !


Quay lại vấn đề hiện tại (và một câu trả lời cho câu hỏi thực tế của bạn ) .....

Hãy xem xét man usermodđể có được lời giải thích cho những gì đang diễn ra:

CÁP ĐIỆN
   Bạn phải chắc chắn rằng người dùng được đặt tên không thực hiện bất kỳ
   xử lý khi lệnh này được thực thi nếu số người dùng
   ID người dùng, tên người dùng hoặc thư mục chính của người dùng đang được
   đã thay đổi usermod kiểm tra điều này trên Linux, nhưng chỉ kiểm tra xem người dùng có
   đăng nhập theo utmp trên các kiến ​​trúc khác.

Về cơ bản, điều này chỉ có nghĩa là chúng tôi không thể thay đổi UID của người dùng, tên người dùng, thư mục chính của họ hoặc bất cứ thứ gì thuộc loại nếu người dùng đăng nhập.

Vì vậy, chúng tôi có thể thực hiện một số nội dung thú vị để thiết lập tính năng này trong lần khởi động tiếp theo của hệ thống. Thay vì kịch bản của bạn thực hiện công việc, chúng tôi tạo kịch bản của bạn tạo một kịch bản khác để thực hiện tất cả các thao tác và thao tác nặng. Một ví dụ về điều này:

# 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

Về cơ bản, bằng cách này, bạn đang "xếp hàng" các sự kiện để chạy trên lần khởi động tiếp theo của hệ thống. Điều này sẽ chạy trước khi vùng người dùng xảy ra, vì vậy hệ thống sẽ thực thi các lệnh này dưới dạng root. Do đó, benngười dùng sẽ không đăng nhập và hệ thống sẽ không khiếu nại.

Bạn vẫn có thể cần thêm các lệnh bổ sung vào điều này để cho phép cá nhân hóa nhiều hơn (như đặt tên thực tế, v.v.). Tuy nhiên, đây là tùy chọn và chỉ cần được thực hiện nếu bạn muốn nó diễn ra trong quá trình thiết lập tập lệnh.

Mặc dù, có thể là một ý tưởng tốt để chỉ tạo một người dùng mới cho các sinh viên hoàn toàn, và sau đó giữ tài khoản hy sinh hiện tại của bạn. Bằng cách này, nếu có điều gì đó xảy ra, bạn có thể đi vào và sửa chữa / quản trị máy của họ nếu cần thiết. Tất nhiên, nếu bạn cấp cho quản trị viên sinh viên của mình quyền truy cập vào VM của họ, thì đây là một điểm cần thiết vì họ rất có thể xóa người dùng "người hướng dẫn" vì họ là sinh viên.


Tôi dự định đề xuất 'thực hiện cài đặt OEM', và sau đó tôi tìm thấy câu trả lời này :-)
sudodus

Cảm ơn bạn đã trả lời câu hỏi gốc về cách đạt được mục đích của mình, tôi sẽ tiếp tục cài đặt OEM.
Ben

0

Ở màn hình đăng nhập, yêu cầu họ nhấn ctrlaltF2và đăng nhập bentừ thiết bị đầu cuối mở và chạy

sudo passwd

Và cung cấp cho họ tất cả cùng một mật khẩu cho root, tức là số khóa học, vì vậy nếu có gì đó bị hỏng, bạn có thể vào và sửa nó. Sau đó yêu cầu họ đăng xuất bằng cách gõ exitvà đăng nhập với quyền root bằng mật khẩu root mới của họ và chạy tập lệnh (bạn có thể phải sửa đổi nó để nó thay đổi benngười dùng chứ không phải root).

Hoặc, yêu cầu họ đăng nhập như ben từ thiết bị đầu cuối bằng cách nhấn ctrlaltF2(như trước) tại màn hình đăng nhập và để họ chạy tập lệnh từ đó. Điều này có thể hoạt động vì như MuruKaz Wolfe đã chỉ ra trong câu trả lời trước đó, người dùng không thể chạy bất kỳ quy trình nào và đăng nhập qua thiết bị đầu cuối không nên bắt đầu bất kỳ quy trình nào, như Xhoặc Ubuntu-Desktop, hoặc các quy trình người dùng khác can thiệp vào usermod. (Tôi không biết nếu nó hoạt động, tôi đã không thử nó, nhưng nó đáng để thử).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.