2016-06-06 4 views
0

Используя следующий код, я не могу получить Fabric для обнаружения приглашения с истекшим паролем при входе в систему. Сеанс не истекает, а параметр abort_on_prompts не запускается. Как я могу настроить Fabric для обнаружения этого состояния?Как обнаружить истекший пароль с использованием Python Fabric?

from fabric.api import env, run, execute 
from fabric import network 
from fabric.context_managers import settings 

def host_type(): 
    with settings(abort_on_prompts=True): 
     print ("Using abort mode %(abort_on_prompts)s" % env) 
     result = run('uname -s') 
return result 

if __name__ == '__main__': 
    print ("Fabric v%(version)s" % env) 
    env.user = 'myuser' 
    env.password = 'user67user' 
    env.hosts = ['10.254.254.143'] 
    host_types = execute(host_type) 

При выполнении данного сценария результатов в подвешенных сценариях, как показано ниже:

 

    Fabric v1.11.1.post1 
    [10.254.254.143] Executing task 'host_type' 
    Using abort mode True 
    [10.254.254.143] run: uname -s 
    [10.254.254.143] out: WARNING: Your password has expired. 
    [10.254.254.143] out: You must change your password now and login again! 
    [10.254.254.143] out: Changing password for myuser. 
    [10.254.254.143] out: (current) UNIX password: 

ответ

0

ткань включает способ ответить на вопросы подсказки.

Вы можете использовать словарь prompts на with settings. В словаре каждый ключ - это вопрос в стандартном выводе, на который вы хотите ответить, а значение - ваш ответ.

Таким образом, в вашем примере:

from fabric.api import env, run, execute 
from fabric import network 
from fabric.context_managers import settings 

def host_type(): 
    with settings(prompts={"(current) UNIX password": "new_password"}): 
     result = run('uname -s') 
return result 

if __name__ == '__main__': 
    print ("Fabric v%(version)s" % env) 
    env.user = 'myuser' 
    env.password = 'user67user' 
    env.hosts = ['10.254.254.143'] 
    host_types = execute(host_type) 
+0

Спасибо, это хорошее начало в правильном направлении. Впоследствии я узнал о подсказках для другой задачи, которую я создавал для смены пароля. FYI, этот пример не будет работать так же, как в двух вариантах Linux, с которыми я тестировал. Код Fabric использует функцию _endwith для сопоставления, поэтому вам нужно включить конечное пространство, например «Пароль UNIX: Поскольку я не буду знать новый пароль и определенно не хочу случайно установить его, m с помощью подсказок для отправки неверного пароля, что приводит к сбою операции с кодом выхода 10. – scottwed

+0

Продолжение: 'с настройками (подсказки = {'UNIX password:': 'BOGUS'}): host_types = выполнить (host_type) ' – scottwed