Я использую эту функцию Fabric, чтобы попытаться добавить пользователя на сервер Ubuntu. Это не вызывает ошибки, но я не могу войти в систему с пользователем, которого пытаюсь добавить после завершения скрипта. Если я добавлю пользователя вручную, после запуска adduser myusername
мне дважды предлагается ввести пароль. В этом сценарии повторяющееся приглашение (как я его называю) обрабатывается (я считаю, неэффективно) путем двойной передачи пароля этой команде echo
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
, или отсутствует полностью.