web-dev-qa-db-ja.com

ユーザーの操作なしでパスワードを使用してユーザーを作成する最良の方法は? (ユーザーにパスワードを要求する)(Ubuntu)

Excilleファイルからユーザー名とパスワードを使用してユーザーアカウントを作成するpythonスクリプトを作成しています。パスワードを使用してユーザーを作成する1行のコマンドを見つけることができません。しかし、p-フラグを使用して「useradd」を試行しましたが、ログインしようとしたときにパスワードが間違っていることがわかります。「adduser」も試行しましたが、まだ方法が見つかりません。ユーザー自身がパスワードを入力する必要があるように。

私がしたいこと:できれば1行のコマンドでパスワードを使用してユーザーアカウントを作成します。

以下は、パスワードなしでユーザーアカウントを作成するときのmy 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)
2
xypo

まだテストしていませんが、ubuntuの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の場合、2番目の引数としてsaltも渡す必要があります。ユーザーごとに異なるsaltを選択する場合は注意してください。

だから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)
1
Patrick Riordan