본문 바로가기

Ubuntu Linux

리눅스 자동 로그인 및 자동으로 스크립트 실행 방법

 

매번 테스트시에 로그인하는게 귀찮아서 자동 로그인을 구현 해야하는 상황이 발생했다🤔

==> 시스템이 부팅될 때 실행되어 특정 터미널 장치에 자동으로 root 사용자로 자동 로그인 되게 할 예정이다.

 

인터넷 찾아보니 나랑 완전히 똑같은 상황은 드물어서 공유하면 좋을 것 같아 기록한다! 내 공부도 되고!😊

 


참조한 글:

https://unix.stackexchange.com/questions/299408/how-to-login-automatically-without-typing-the-root-username-or-password-in-build

 

How to login automatically without typing the root username or password in Buildroot BusyBox init?

If I do: git clone git://git.buildroot.net/buildroot cd buildroot git checkout 2016.05 make qemu_x86_defconfig make BR2_JLEVEL=2 qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=...

unix.stackexchange.com

 

https://community.nxp.com/t5/i-MX-Processors/Reg-Auto-Login-and-run-a-script-Automatically/m-p/289260

 

Reg: Auto-Login and run a script Automatically

Hi All, I would like to have a program starting right after boot. I have made some research about it but I could not find any solution for my problem until now. I want to connect the power supply of my board, it will boot, automatically login, run a script

community.nxp.com


 

 

자동 로그인 추가 후 sdcard img로 만들어 update할 예정임.

 

 

1. home/root/ 경로에 autologin.sh 파일 생성

+ 파일 생성 후 실행 권한 설정 : chmod +x autologin.sh

#!/bin/sh
exec /bin/login -f root

 

-  주어진 터미널에 자동으로 root 사용자로 로그인하는 데 사용

 

1. #!/bin/sh: 이것은 스크립트가 사용할 쉘을 지정합니다. 여기서는 /bin/sh가 사용됩니다.

2.exec: 이 명령어는 현재 프로세스를 새로운 프로세스로 대체합니다. 따라서 이 명령어 이후에 오는 명령어가 실행됩니다.
2. /bin/ogin -f root: 이 줄은 /bin/login 프로그램을 실행하는 명령어입니다. -f root는 사용자를 root로 로그인하도록 지시합니다.


따라서 이 스크립트는 시스템이 부팅될 때 실행되어 특정 터미널 장치에 자동으로 root 사용자로 로그인합니다.

 

 

 

2. package/sysvinit/inittab 파일에 위의 .sh파일 경로 추가

//package/sysvinit/inittab 파일

# S0:1:respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL
PS0::respawn:/sbin/getty -l /home/root/autologin.sh -n -L ttyPS0 0 vt100 # GENERIC_SERIAL
  • sysvinit
    1. init 데몬이 /etc/inittab 파일을 읽음. (v)
    2. init 데몬이 /etc/rc.sysinit 스크립트를 읽음
    3. init 데몬이 /etc/rc 스크립트를 실행한다.
    4. /etc/rc 스크립트가 /etc/rc(run level).d 디렉터리 이하의 스크립트를 실행한다.
    ==> 이래서 sysvinit/inittab 을 수정 후 make 하면 etc/inittab에 저장됨.
  • Linux 시스템에서 최초로 실행된 프로세스인 init이 /etc/inittab파일의 설정에 따라 시스템이 필요한 서비스를 순차적으로 가동시킴.

inittab 파일은 시스템 초기화 및 프로세스 관리를 담당하는 데 사용되는 설정 파일 중 하나입니다.
주어진 줄은 시스템이 부팅될 때 특정 터미널 장치에 대한 로그인을 관리하는 데 사용됩니다.
1.
PS0: 이 줄은 특정 터미널 디바이스를 나타냅니다. 보통 시스템에서 시리얼 포트를 나타내는 ttyS0와 같은 형식을 사용합니다. 여기서는 PS0로 표시되어 있으며, 시스템의 특정 시리얼 포트를 나타내는 임의 지정된 id입니다.
2.
respawn: 프로세스 관리를 나타내는 키워드입니다. 이 부분은 getty 프로세스가 종료되면 다시 실행되도록 하는 역할을 합니다. 즉, 이 줄의 내용인 getty 프로세스가 종료되면 시스템이 자동으로 해당 터미널에 대한 로그인 프로세스를 다시 시작합니다.
3.
/sbin/getty: 실행될 프로그램 또는 명령어를 나타냅니다. getty는 터미널 장치에 로그인 프롬프트를 표시하는 프로그램입니다.
4.
-l /home/root/autologin.sh: 이 옵션은 로그인이 성공하면 /home/root/autologin.sh 스크립트를 실행합니다. 즉, 로그인이 성공하면 /home/root/autologin.sh 스크립트를 실행하고, 그렇지 않으면 다시 로그인을 시도합니다.
5.
-n: 이 옵션은 getty가 로그인 이름 입력을 요구하지 않도록 지정합니다.
6.
-L ttyPS0: 이 옵션은 로그인 프롬프트를 터미널에 출력합니다. 여기서는 ttyPS0로 표시된 특정 시리얼 포트에 출력됩니다.
7.
vt100: 이 부분은 로그인 프롬프트의 터미널 유형을 지정합니다. "vt100"은 터미널 유형을 나타내는 것으로, 여기서는 가장 일반적인 유형 중 하나입니다.


따라서 이 줄은 시스템이 부팅될 때
/home/root/autologin.sh 스크립트를 사용하여 특정 터미널 장치(ttyPS0)에서 자동 로그인을 관리하고, 사용자에게 로그인 이름을 요구하지 않는 방식으로 설정된 것입니다.

 

 

 

 

 

 

3. /package/sysvinit/sysvinit.mk 경로의 make 파일에 autologin.sh 경로 및 옵션 추가 [-l /home/root/autologin.sh -n] 

ifeq ($(BR2_TARGET_GENERIC_GETTY),y)
define SYSVINIT_SET_GETTY
	$(SED) '/# GENERIC_SERIAL$$/s~^.*#~$(shell echo $(SYSTEM_GETTY_PORT) | tail -c+4)::respawn:/sbin/getty -l /home/root/autologin.sh -n -L $(SYSTEM_GETTY_OPTIONS) $(SYSTEM_GETTY_PORT) $(SYSTEM_GETTY_BAUDRATE) $(SYSTEM_GETTY_TERM) #~' \
		$(TARGET_DIR)/etc/inittab
endef

 

마지막으로, sysvinit.mk 파일을 수정하여 login.sh 파일의 경로를 지정해야 합니다. 이렇게 하면 inittab 파일에서 지정한 스크립트가 올바르게 실행됩니다.

 

 

 

4. make

 


+ 추가

ssh로 파일 수정시

  1. home/root/autologin.sh 넣기 + 실행권한
  2. etc/inittab에 [2]번 문장 삽입

추가 정보 🍘

 

시스템 부팅 및 재부팅 그리고 실행레벨을 init이나 shutdown 으로 변경시 init 데몬이 etc/inittab파일에서 정보를 읽어 프로세스를 시작한다.

 

inittab 파일에 대한 필드 설명

필드 설명
id 항목에 대한 고유 식별자입니다.
rstate 이 항목이 적용되는 실행 레벨을 나열합니다.
작업 process 필드에 지정된 프로세스를 실행할 방법을 식별합니다. 가능한 값은 sysinit, boot, bootwait, wait 및 respawn입니다.
프로세스 실행할 명령 또는 스크립트를 정의합니다.

 

 

sysvinit

Linux 시스템에서 최초로 실행된 프로세스인 init이 /etc/inittab파일의 설정에 따라 시스템이 필요한 서비스를 순차적으로 가동시킴.

  1. init 데몬이 /etc/inittab 파일을 읽음. (v)
  2. init 데몬이 /etc/rc.sysinit 스크립트를 읽음
  3. init 데몬이 /etc/rc 스크립트를 실행한다.
  4. /etc/rc 스크립트가 /etc/rc(run level).d 디렉터리 이하의 스크립트를 실행한다.

 

==>이래서 sysvinit/inittab 을 수정 후 make 하면 etc/inittab에 저장됨.

 

 

https://docs.oracle.com/cd/E24846_01/html/E23290/hbrunlevels-12863.html

 

/etc/inittab 파일 - 시스템 관리 설명서: 기본 관리

/etc/inittab 파일 시스템을 부트하거나 init 또는 shutdown 명령으로 실행 레벨을 변경하면 init 데몬이 /etc/inittab 파일에서 정보를 읽어 프로세스를 시작합니다. 이 파일은 다음과 같이 init 프로세스에

docs.oracle.com