2016-04-25 24 views
-1

Ich frage mich, wie Fabric Befehle ausführt.Wie führt Fabric Befehle aus?

Sagen wir, ich gebe ihm env.user=User, env.host=HOST. Dann frage ich ihn zu sudo('ls') Ist das gleichbedeutend mit mir in einer Shell eingeben: ssh [email protected] 'sudo(/bin/ls)' oder es ist mehr: ssh [email protected] in einem ersten Mal, dann sudo ls commande in einer seconde Zeit?

ich gefragt bin, dass da manchmal eine Shell verwenden, wenn die TTY eine schlechte Konfiguration hat (ich dies ein wenig verschwommen bin), ssh [email protected] 'sudo /bin/ls' return: sudo: no tty present and no askpass program specified aber Sie können sich zunächst anmelden, mit ssh [email protected] dann sudo ls und es funktioniert.

Ich weiß nicht, wie man den no tty Fehler repliziert, aber ich weiß, dass es auftreten kann. Würde das die Sudokommande von Fabric blockieren?

Antwort

1

Im Grunde, wie es funktioniert, ist:

  • Zunächst wird eine Verbindung hergestellt ist (äquivalent wie tun ssh [email protected])
  • Über diese Verbindung einen Befehl wie folgt ausgeführt wird:

    sudo -S -p 'sudo password:' /bin/bash -l -c "your_command" 
    

    Sie können Lassen Sie Fabric auch keine pty mit pty=False Argument, env.always_use_pty=False oder --no-pty Kommandozeilenoption anfordern.