Я еще не проверял это, но похоже, что вам нужно передать пароль, который уже был зашифрован из man useradd
на ubuntu (, возможно, поэтому он не работал раньше):
-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 (пароль )Это сработало для меня:
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)
Я уже решил перейти к архивам /var/cache/apt/archives apt и принудительно перезаписать пакет nodejs.
cd /var/cache/apt/archives
, а затем:
dpkg -i --force-overwrite 'nodejspackage.db'