Судо в Fabric2 - PullRequest
       47

Судо в Fabric2

0 голосов
/ 29 июня 2018

Я хотел бы воспроизвести поведение моего старого скрипта Fabric1, работающего

sudo('useradd -m -u --groups mygroup myuser')

В этом случае удаленный компьютер (экземпляр Ubuntu AWS) запросит у меня пароль sudo, и я смог его ввести. Даже повторный запрос после неправильного ввода будет работать. После этого Fabric1 будет удерживать этот пароль, оставляя соединение открытым.

В моем новом скрипте Fabric 2.x, который я использую в @ task

c.sudo('useradd -m -u --groups mygroup myuser')

Я все еще получаю приглашение пользователя, но оно не ждет моего ответа, я не могу набрать пароль, и он не работает, как ожидалось, с

invoke.exceptions.AuthFailure: The password submitted to prompt '[sudo] password: ' was rejected

Использование аргумента --prompt-for-sudo-password имеет тот же (или не влияет).

Я тоже пытался

run('sudo useradd -m -u --groups mygroup myuser')

и получил

sudo: no tty present and no askpass program specified

Я бы предпочел не устанавливать программу askpass на машине, которая прекрасно работала без использования Fabric 1.x (если, конечно, я не мог бы сделать это из моего скрипта, который потребовал бы sudo).

Я бился головой о стену, пытаясь использовать сложную и недостаточно документированную систему конфигурации, но безуспешно.

Что мне не хватает? Если требуется дополнительная конфигурация, я хотел бы знать синтаксис файла конфигурации, а также где разместить этот файл, чтобы он был выбран командой fab CLI.

1 Ответ

0 голосов
/ 29 июня 2018

Кажется, имеет значение, что аргументы передаются перед заданиями, поэтому убедитесь, что вы не просто добавляете аргументы в конце команды. Например, это не удается (не запрашивает пароль, затем не проходит аутентификацию sudo):

$ fab -H myhost mysudotask --prompt-for-sudo-password
[sudo] password: Sorry, try again.
[sudo] password: Traceback (most recent call last):
... <snip> ...
  File "<string>", line 2, in raise_from
invoke.exceptions.AuthFailure: The password submitted to prompt '[sudo] password: ' was rejected.

Хотя следующее работает должным образом (запрос пароля, затем выполнение задачи sudo):

$ fab -H myhost --prompt-for-sudo-password mysudotask 
Desired 'sudo.password' config value: 
[sudo] password: hi 1
...