새 사용자 이름, 호스트 이름 및 비밀번호를 설정하는 .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대화 형 프로세스를 수행하여 비 대화식으로 만드는 데 사용한 적이 있습니다. 기본적으로 expect특정 출력을 가진 스크립트를 작성하고 스크립트 에 응답이 이미 알려져 있습니다. Ben은 사용자 입력을 기다렸다가이를 기반으로 명령을 실행하려고합니다. 물론, 적어도 하루에 한 번 틀렸으므로 이것이 사실 일 수 있습니다.

사실, 나는 사용자 입력을 취하는 부분에 좋습니다. 호스트 이름과 사용자 이름을 수집하면 변수로 저장됩니다. 문제가되는 것은 그 이후입니다. 즉 의견 아래에서.
Ben

1
이 방법에는 몇 가지 결함이 있습니다. 하나, 현재 사용자 경로를 변경할 수 없습니다. 불가능합니다. bash 프롬프트는 호스트 이름이 변경 될 때 업데이트되지 않으며 터미널을 열 때 한 번만 읽습니다. 당신은 할 수 exec bash있지만 기술적으로 중첩 된 터미널을 열 것입니다.

호스트 이름 문제를 해결하려면, 당신을 대체 할 것이다 sed.. 이런 일에 sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts 무엇을 거기에 127.0.1.1 라인, 그냥 APPEND 새 호스트를 업데이트한다. 이전 호스트는 그대로두고 하나의 IP에 여러 호스트가 할당되어 있습니다. sudo호스트 이름을 변경 하여 다른 명령으로 해결할 수없는 문제를 방지 할 수 있습니다.

답변:


8

왜 OEM 설치를 사용하지 않습니까? 예쁘지는 않지만 작업이 완료됩니다. 이 경로로 내려 가려면이 질문에 대한 izx의 훌륭한 답변을 참조하십시오. 누군가를 위해 Ubuntu를 사전 설치하려면 어떻게해야합니까 (OEM 설치)?

기본적으로 시스템은 (첫 부팅시) 사용자에게 머신을 개인화하기위한 많은 정보를 요구합니다. 여기에는 언어, 위치, 사용자 이름, 호스트 이름, 비밀번호 등이 포함됩니다. 기본적으로 컴퓨터가 설치하라는 메시지를 표시하는 모든 것.

이것이 바로 OEM 이미지를위한 것입니다. 또한 학생들에게 "install Ubuntu"경험을 약간 맛볼 수 있습니다. 그럼에도 불구하고 우분투 설치는 고통스럽지 않습니다. 당신은 아마 하나의 수업에서 그것을 할 수 있고 학생들에게 그들의 VM을 개인화하고 탐구하는 숙제를 줄 수 있습니다. 또한 파티셔닝은 고통스런 재미입니다!


당면한 문제 ( 실제 질문에 대한 답변)로 돌아 가기 .....

man usermod무슨 일이 일어나고 있는지 설명해 봅시다 :

주의 사항
   명명 된 사용자가 실행되고 있지 않은지 확인해야합니다.
   사용자가 숫자 인 경우이 명령이 실행될 때 처리
   사용자 ID, 사용자 이름 또는 사용자의 홈 디렉토리가
   변경되었습니다. 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

기본적으로이 작업을 수행하면 시스템의 다음 부팅시 "대기열"이벤트가 실행됩니다. 이것은 사용자 영역이 발생하기 전에 실행되므로 시스템은 이러한 명령을 루트로 실행합니다. 따라서 ben사용자가 로그인하지 않고 시스템이 불평하지 않습니다.

실제 이름 설정과 같은 개인 설정을 허용하기 위해이 명령에 명령을 추가해야 할 수도 있습니다. 그러나 이것은 선택 사항이며 설정 스크립트 중에 수행하려는 경우에만 수행하면됩니다.

그러나 학생들을 위해 완전히 새로운 사용자를 만든 다음 기존 희생 계정을 유지하는 것이 좋습니다. 이런 식으로, 어떤 일이 발생하면, 필요할 경우 기계에 들어가서 수리 / 관리 할 수 ​​있습니다. 물론, 학생들에게 관리자에게 VM에 대한 액세스 권한을 부여하는 경우 학생이기 때문에 "강사"사용자를 매우 잘 삭제할 수 있기 때문에 일종의 약점입니다.


나는 'OEM 설치하기'를 제안하려고
했는데이

내 목표를 달성하는 방법에 대한 근본 질문에 답변 해 주셔서 감사합니다. OEM 설치를 진행하겠습니다.
Ben

0

로그인 화면에서 열고 실행하는 터미널에서 ctrlaltF2와 같이 로그인하고 로그인하게 ben하십시오.

sudo passwd

루트에 동일한 비밀번호 (예 : 코스 번호)를 부여하면 문제가 발생하면이를 수정하십시오. 그런 다음을 입력하여 로그 아웃 exit하고 새 루트 비밀번호로 루트로 로그인하고 스크립트를 실행하십시오 ( ben루트가 아닌 사용자를 변경하도록 수정해야 할 수도 있음 ).

또는 ctrlaltF2로그인 화면에서 (이전과 같이)을 눌러 터미널에서 벤으로 로그인 한 다음 거기서 스크립트를 실행하게하십시오. 로하기 때문에 일할 수 Muru카즈 울프는 이전의 대답에 지적, 사용자가 모든 프로세스를 실행하고, 터미널과 같은 모든 프로세스 시작 안 통해 로그인 할 수 없습니다 X또는 Ubuntu-Desktop방해하거나, 다른 유저 랜드 프로세스를 usermod. (이 기능이 작동하는지 모르겠지만 시도하지는 않았지만 시도해 볼 가치가 있습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.