在没有任何用户交互的情况下创建带有密码的用户的最佳方法? (询问用户密码)(Ubuntu)

在没有任何用户交互的情况下创建带有密码的用户的最佳方法? (询问用户密码)(Ubuntu)

我正在创建一个 python 脚本,它将使用 exile 文件中的用户名和密码创建用户帐户。不过,我无法找到可以创建带有密码的用户的单行命令。我尝试过使用 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 useraddubuntu 上加密的密码(这可能就是它之前不起作用的原因):

       -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)

相关内容