2015-11-26 7 views
1

У меня есть ткань файл, в котором я установить env.password, как я прочитал о на его документы:как заставить ткань использовать env.password установки

from fabric.api import * 


env.password = "mypassword" 

print env.user 
print env.password 
def update(): 
    local("sudo apt-get update") 

Тем не менее, когда я запускаю файл, он по-прежнему побуждая я за пароль:

[email protected]:~$ fab -f fab_setup_new_linux_box.py update 
cchilders 
mypassword 
[localhost] local: sudo apt-get update 
[sudo] password for cchilders: 

Я думал, что это была идея установить env.password? Когда я использую Sudo или бежать, он говорит:

«не найдено Пожалуйста, укажите (один) хост строку для подключения хостов:.»

Как не сделать, чтобы запустить его вещи, используя пароль я поставил? Спасибо

+0

проверка http://stackoverflow.com/questions/2326797/how-to-set-target-hosts-in-fabric-file –

+0

это не помогло мне, я просто хочу, чтобы этот файл был запущен на моей локальной машине. установка 'env.hosts = ['localhost']' не помогла ни – codyc4321

+0

Что вы видите, так это приглашение пароля 'sudo'. Вы не можете его установить. Чтобы предотвратить это приглашение, вы должны запускаться как root или адаптировать файл sudoers, чтобы разрешить sudo без пароля для этой команды. –

ответ

1

Я получил его для работы. Это не очень.

from fabric.api import * 


env.password = "mypassword" 

print env.user 
print env.password 
def update(): 
    local("echo {} | sudo -S apt-get update".format(env.password)) 

Да, мне тоже это не нравится. Вот результат: (да я создал свой пользователь на моем VirtualBox)

$ fab update 
cchilders 
mypassword 
[localhost] local: echo mypassword | sudo -S apt-get update 
Hit http://ppa.launchpad.net precise InRelease 
Hit http://ppa.launchpad.net precise/main Sources                     
Hit http://ppa.launchpad.net precise/main amd64 Packages              
Hit http://ppa.launchpad.net precise/main i386 Packages    
Hit http://ppa.launchpad.net precise/main TranslationIndex   
Hit http://security.ubuntu.com precise-security InRelease    
Hit http://ppa.launchpad.net precise/main Translation-en     
Ign http://us.archive.ubuntu.com precise InRelease 
Hit http://us.archive.ubuntu.com precise-updates InRelease 
Hit http://us.archive.ubuntu.com precise-backports InRelease 
Get:1 http://security.ubuntu.com precise-security/main Sources [136 kB] 
Get:2 http://us.archive.ubuntu.com precise Release.gpg [198 B] 
Get:3 http://us.archive.ubuntu.com precise-updates/main Sources [494 kB] 
Get:4 http://security.ubuntu.com precise-security/restricted Sources [4,476 B] 
Get:5 http://security.ubuntu.com precise-security/universe Sources [43.8 kB] 
Get:6 http://security.ubuntu.com precise-security/multiverse Sources [2,198 B]   
Get:7 http://security.ubuntu.com precise-security/main amd64 Packages [563 kB] 
... 
+0

вы серьезно? Я люблю это! Я никогда не знал, что это возможно, но я просто сделал echo mypw | sudo -S apt-get update, и вы можете увидеть, как он близок к нему (если вы смотрите близко). Это самая крутая вещь, которую я когда-либо видел в bash, и мне даже не нужна ткань, которую я узнал больше для настройки своих виртуальных машин (у меня есть только один живой проект, и я могу использовать этот скрипт для этого) – codyc4321

+0

Do у вас есть какая-то техническая идея о том, что он делает? Как и в случае, когда вы подключаетесь, вы передаете что-то следующей команде, но я думал, что эхо собирается в stdout (что вы можете видеть, а не то, что вы набираете для оболочки) Я хочу попробовать это на разных типах подсказок, но вы точно знаете, что такое эхо? Спасибо, Хавьер – codyc4321

+0

На самом деле я думаю, что это так решило? -S, --stdin Напишите запрос на стандартную ошибку и прочитайте пароль со стандартного ввода вместо с использованием терминального устройства. За паролем должен следовать символ новой строки. – codyc4321