텍스트 파일의 데이터에서 사용자를 추가하는 방법

텍스트 파일의 데이터에서 사용자를 추가하는 방법

Linux에서 여러 사용자를 생성하는 방법에 대해 질문이 있는데, 이를 작업하려면 프로그램이 필요합니다. 새로운 사용자 txt 파일이 있으며 내용은 다음과 같습니다.

adams:5000:Adams, John Couch:/bin/bash
atiyah:5001:Atiyah, Michael:/bin/csh
babbage:5002:Babbage, Charles:/bin/csh
baker:5003:Baker, Alan:/bin/csh
barrow:5004:Barrow, Isaac:/bin/bash

... (파일에 70명의 사용자 이름이 있습니다)

해당 사용자를 자동으로 추가하는 스크립트를 작성하는 방법을 알고 싶습니다.

답변1

파일 이름이 just 이라고 가정해 보겠습니다 file. 이 스크립트는 다음 작업을 수행합니다.

USERNAME=$(cat file | cut -d: -f1)
echo "$USERNAME"

ID=$(cat file | cut -d: -f2)
echo "$ID"

USER_SHELL=$(cat file | cut -d, -f2 | cut -d: -f2)
echo "$USER_SHELL"

useradd -m -s "$USER_SHELL" -u "$ID" "$USERNAME"

답변2

이것은 작업을 완료하기 위한 최소한의 스크립트입니다. 사용자 이름이나 uid가 이미 사용 중이 아닌지 확인합니다. 각 사용자에 대해 일치하는 그룹을 만듭니다(gid=uid 사용). gid 또는 그룹 이름이 이미 존재하는지 확인하지 않습니다(독자의 연습용으로 남겨두었습니다. 힌트: 사용 getent group).

참고: 아래 스크립트는 테스트되지 않았지만 이전에 이와 유사한 스크립트를 백만 번 이상 작성했습니다(약간 과장)....수정이 필요한 사소한 버그가 있을 수 있습니다.

#! /bin/bash
# get newusers file from first arg on cmd line or default to 'newusers.txt'
nf="${1:-newusers.txt}"

# get existing usernames and uids.
names="^($(getent passwd | cut -d: -f1 | paste -sd'|'))$"
 uids="^($(getent passwd | cut -d: -f3 | paste -sd'|'))$"

yesterday=$(date -d yesterday +%Y-%m-%d)
# temp file for passwords
tf=$(mktemp) ; chmod 600 "$tf"

while IFS=: read u uid gecos shell; do
    gid="$uid" ; homedir="/home/$u"
  
    useradd  -e "$yesterday" -m -d "$homedir" -c "$gecos" \
             -u "$uid" -g "$gid" -s "$shell" "$u"

    groupadd -g "$gid" "$u"
  
    # generate a random password for each user..
    p=$(makepasswd)
    echo "$u:$p" >> "$tf"
done < <(awk -F: '$1 !~ names && $2 !~ uids' names="$names" uids="$uids" "$nf")

# uncomment to warn about users not created:
#echo Users not created because the username or uid already existed: >&2
#awk -F: '$1 ~ names || $2 ~ uids' names="$names" uids="$uids" "$nf" >&2    

# uncomment the cat to display the passwords in the terminal
echo ; echo "passwords are saved in $tf"
# cat "$tf"

# set passwords using `chpasswd:
chpasswd < "$tf"

설치되지 않은 경우 pwgen또는 makepassword유사한 프로그램을 사용하십시오 . makepasswd또는 4개 이상의 임의의 5개 이상의 문자 단어를 연결하여 최소 20자 길이의 기억하기 쉬운 암호를 얻으십시오. 일부 단어를 대문자로 만들고 각 단어 사이에 임의의 1-3자리 숫자 및/또는 구두점 기호를 삽입하여 암호를 동일하게 만드십시오. 더 길고 무차별 검색 공간을 늘리십시오. 무작위 비밀번호 생성은 여러 번 재창조된 것입니다.

사용자 이름과 비밀번호( 에서)를 인쇄 "$tf"하고 스트립으로 잘라서(각 사이에 몇 줄의 공백을 남겨두기 user:password) 각 사용자에게 제공할 수 있습니다. 즉시 비밀번호를 변경하고 종이 조각을 파기하라고 알려주십시오. 비밀번호는 만료되도록 설정되어 있으므로 "$yesterday"(GNU 필요 date) 사용자가 쉘에 처음 로그인할 때 비밀번호를 변경하라는 메시지가 표시되어야 합니다.

답변3

일괄 모드의 파일에서 사용자를 추가하거나 업데이트하는 더 쉬운 방법이 있습니다.newusers(8)배치 모드의 파일에서 사용자를 추가하거나 업데이트하는 더 쉬운 방법 이그림자도구 스위프트. 도구 모음은 최소한 Debian 및 파생 제품에 대한 패키지로 제공되어야 합니다. 제가 사용하고 있는 Arch Linux에서 사용할 수 있습니다.

사용 방법에 대한 자세한 내용은 다음을 참조하세요.man newusers

관련 정보