fabric 是如何执行命令的?

how does fabric execute commands?

我想知道 fabric 是如何执行命令的。

假设我给他 env.user=User, env.host=HOST。然后我请他sudo('ls') 这是否等同于我输入 shell : ssh User@host 'sudo(/bin/ls)' 或者更多:第一次 ssh User@host,然后 sudo ls 第二次指挥?

我问这个是因为有时使用 shell,如果 TTY 配置错误(我对此有点模糊),ssh User@Host 'sudo /bin/ls' return : sudo: no tty present and no askpass program specified 但您可以先使用 ssh User@Host 登录,然后使用 sudo ls 登录,然后就可以了。

我不知道如何重现 no tty 错误,但我知道它可能会发生。这会阻止来自 Fabric 的 sudo 命令吗?

基本上它是如何工作的:

  • 首先建立连接(相当于ssh User@host
  • 通过此连接执行如下命令:

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

    您还可以允许 Fabric 不使用 pty=False 参数、env.always_use_pty=False--no-pty 命令行选项请求 pty。