Я использую эту функцию Матрицы, чтобы попытаться добавить пользователя к серверу Ubuntu. Это не бросает ошибку, но я не могу войти в систему с пользователем, которого я пытаюсь добавить после того, как сценарий закончился. Если я добавляю пользователя вручную, после того, как я буду работать adduser myusername
команда, мне предлагают дважды ввести пароль. В этом сценарии с повторной подсказкой (поскольку я называю его) имеют дело с (неэффективно, я верю) путем передачи пароля дважды этой команде эха
if not sudo("adduser %s | echo -e '%s\n%s\n'" % (new_user,passwd,passwd)).failed:
Можно ли объяснить, как с этим более соответственно имели бы дело в этой функции?
def user_add(new_user, passwd=False):
"""Add new user"""
with settings(hide('running', 'stdout', 'stderr'), warn_only=True):
# if is_host_up(env.host):
if not passwd:
passwd = generate_passwd()
if not sudo("adduser %s | echo -e '%s\n%s\n'" % (new_user,passwd,passwd)).failed:
run('echo "{user} ALL=(ALL:ALL) ALL" >> /etc/sudoers'.format(user=new_user))
...other code not included
adduser
- это всего лишь фронт-енд Debian/Ubuntu к более обычной команде useradd
, которая принимает различные опции в командной строке, в том числе предварительно хэшированный пароль в качестве опции -p
. Для этого, вероятно, необходимо вызвать useradd
с нужными опциями вместо adduser
.
В большинстве других дистрибутивов Linux, adduser
просто ссылается на useradd
, или отсутствует полностью.