2012-11-01 17 views
6

Używam do automatyzacji wdrożenia. W tym procesie korzystam z funkcji prompt, aby poprosić użytkownika o dane wejściowe. W szczególności muszę poprosić o hasło i chciałbym ukryć wartość wprowadzoną przez użytkownika, np. Używając Pythona getpass. Chciałbym użyć prompt ze względu na obsługę argumentów key i validate.Uzyskaj hasło od użytkownika w aplikacji Fabric, bez echa wartości:

Czy jest na to wbudowany moduł Fabric, czy też muszę zmienić prompt source (ostatecznie wysyłając żądanie ściągnięcia)?

Odpowiedz

6

Możesz być w stanie wykorzystać prompt_for_password w fabric.network

def prompt_for_password(prompt=None, no_colon=False, stream=None): 
    """ 
    Prompts for and returns a new password if required; otherwise, returns 
    None. 

    A trailing colon is appended unless ``no_colon`` is True. 

    If the user supplies an empty password, the user will be re-prompted until 
    they enter a non-empty password. 

    ``prompt_for_password`` autogenerates the user prompt based on the current 
    host being connected to. To override this, specify a string value for 
    ``prompt``. 

    ``stream`` is the stream the prompt will be printed to; if not given, 
    defaults to ``sys.stderr``. 
    """ 
    from fabric.state import env 
    handle_prompt_abort("a connection or sudo password") 
    stream = stream or sys.stderr 
    # Construct prompt 
    default = "[%s] Login password for '%s'" % (env.host_string, env.user) 
    password_prompt = prompt if (prompt is not None) else default 
    if not no_colon: 
     password_prompt += ": " 
    # Get new password value 
    new_password = getpass.getpass(password_prompt, stream) 
    # Otherwise, loop until user gives us a non-empty password (to prevent 
    # returning the empty string, and to avoid unnecessary network overhead.) 
    while not new_password: 
     print("Sorry, you can't enter an empty password. Please try again.") 
     new_password = getpass.getpass(password_prompt, stream) 
    return new_password 

to wygląda to jak tkanina pobiera hasło ssh, one następnie ustawić na env używając:

def set_password(password): 
    from fabric.state import env 
    env.password = env.passwords[env.host_string] = password 

Key jest łatwo można go zastąpić, ustawiając env, ale wygląda na to, że może być konieczne sprawdzenie samego siebie ...

Powiązane problemy