2012-11-08 1 views
6

с тканью, в соответствии с this documentation, вы можете запустить любую команду оболочки, не имея fabfile так:Как запустить произвольную команду sudo для Fabric без ввода пароля?

fab -H host1,host2 -- echo 'hello, world!' 

Вы также можете запустить sudo команды таким же образом, но вам будет предложено ввести sudo пароль для каждого хоста в списке.

Есть ли способ избежать ввода пароля sudo для каждого хоста, как функция Fabric sudo() работает?

+0

Оригинальный плакат, похоже, спрашивает, как я могу сделать следующее, не запрашивая пароль sudo для каждого хоста: 'fab -H host0, host1, host2 - sudo/root/bin/my_script_that_must_be_run_as_root.sh'. Я знаю, как писать fabfile для этого, но я хотел бы знать, как сделать это как дополнительную команду. В этом случае опция -I не работает. Я тестирую Fabric 1.6.0. – Carl

ответ

2

просто добавьте следующую строку в etc/sudoers, где myusername должен быть предназначенным пользователем, который будет запускать sudo. Вы должны понимать последствия для безопасности выполнения следующих действий. Вы также можете ограничить приведенные ниже параметры, чтобы ограничить команды, которые пользователь может использовать без пароля.

myusername ALL=(ALL) NOPASSWD: ALL 
0

Вы также можете рассмотреть возможность аутентификации pam с помощью ssh key-file. Хорошим праймером будет этот блог - entry. Таким образом, вам не придется нарушать безопасность. Вы даже можете скопировать ключевой файл до sudo-операций в свою удаленную учетную запись при условии, что у вас есть квалифицированная учетная запись. :-)

1

Вы можете установить env.password, чтобы ткань сделать магию или ...

... Вы также можете использовать пароли для нескольких машин:

from fabric import env 
env.hosts = ['[email protected]:port1', '[email protected]'] 
env.passwords = {'[email protected]:port1': 'password1', '[email protected]': 'password2'} 

Смотрите этот ответ: https://stackoverflow.com/a/5568219/552671