사용자 상호 작용 없이 비밀번호로 사용자를 생성하는 가장 좋은 방법은 무엇입니까? (사용자 비밀번호 요청) (Ubuntu)

사용자 상호 작용 없이 비밀번호로 사용자를 생성하는 가장 좋은 방법은 무엇입니까? (사용자 비밀번호 요청) (Ubuntu)

추방 파일의 사용자 이름과 비밀번호를 사용하여 사용자 계정을 생성하는 Python 스크립트를 만들고 있습니다. 하지만 비밀번호로 사용자를 생성할 수 있는 한 줄 명령을 찾을 수 없습니다. p 플래그를 사용하여 "useradd"를 시도했지만 로그인을 시도하면 비밀번호가 잘못되었다는 메시지가 나타납니다. "adduser"도 시도했지만 아직 방법을 찾지 못했습니다. 비밀번호는 이용자가 직접 입력해야 하는 것 같습니다.

내가 하고 싶은 것:한 줄 명령을 사용하여 비밀번호로 사용자 계정을 만드는 것이 더 좋습니다.

이것은 비밀번호 없이 사용자 계정을 생성하는 현재 Python 코드입니다.

#!/usr/bin/env python

import os
import openpyxl
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

excel_file = os.open("Names_mod.xlsx", os.O_RDONLY)
wb = openpyxl.load_workbook("Names_mod.xlsx")
sheet = wb.active
max_row = sheet.max_row

for i in range(1, max_row + 1):
    name = sheet.cell(row = i, column = 5)  
    password = sheet.cell(row = i, column = 6)
    addUser = "sudo useradd -m  " + name.value
    os.system(addUser)

답변1

아직 테스트하지는 않았지만 man useradd우분투에서 이미 암호화된 비밀번호를 전달해야 하는 것 같습니다(이것이 아마도 이전에는 작동하지 않았던 이유일 것입니다).

       -p, --password PASSWORD
           The encrypted password, as returned by crypt(3). The default is to disable the password.

           Note: This option is not recommended because the password (or encrypted password) will be visible by users listing the processes.

           You should make sure the password respects the system's password policy.

crypt 모듈은 Python 2와 3에 존재합니다. Python 3의 경우 crypt.crypt(password)를 사용할 수 있습니다.

python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt
>>> crypt.crypt("hello")
'$6$AFKk6qImS5R6bf//$Voc7MRbOX5R2R8GvmmEHxVgx/wVorKO4y2Vuufgkph798mo/SJ6ON8vKJWj1JTsRdwNyb9oiTmHiNYGiOL4Q20'
>>> 

Python 2의 경우 솔트를 두 번째 매개변수로 전달해야 합니다. 사용자마다 다른 소금이 선택된다는 점에 유의하세요.

그러니 tl;dr python3에서 이것을 시도해 보세요:

import crypt

...

for i in range(1, max_row + 1):
    name = sheet.cell(row = i, column = 5)  
    password = sheet.cell(row = i, column = 6)
    encrypted_password = crypt.crypt(password)
    addUser = "sudo useradd -m  " + name.value + " -p " + encrypted_password
    os.system(addUser)

편집: 원본 포스터에 따르면 Python2에서는 작동하지 않으며 비밀번호가 여전히 잘못되었습니다. Python3에서도 실제 로그인을 테스트하지 않았습니다. Python2의 경우 작동하지 않습니다.

for i in range(1, max_row + 1):
    name = sheet.cell(row = i, column = 5)  
    password = sheet.cell(row = i, column = 6)
    encrypted_password = crypt.crypt(password, name.value)
    # This doesnt work!
    addUser = "sudo useradd -m  " + name.value + " -p " + encrypted_password
    os.system(addUser)

관련 정보