tty 必须在结构中 运行 sudo。如何克服这个?

tty a must to run sudo in fabric. How to overcome this?

我通过以下命令使用 fabric 运行 fastcgi_mono 服务:

sudo('/etc/init.d/fastcgi_mono restart', pty=False)

但是当我执行它时,它给我这个错误:

[52.192.204.174] run: sudo /etc/init.d/fastcgi_mono restart
[52.192.204.174] out: sudo: sorry, you must have a tty to run sudo
[52.192.204.174] out: 


Warning: run() received nonzero return code 1 while executing 'sudo /etc/init.d/fastcgi_mono restart'!

我该如何解决这个问题?请帮忙。

我解决这个问题的方法是,我不知道是否有更好的方法,但它在我看来很有意义:我在 fabfile.py、ubuntu 中设置了两个用户(其中具有 sudo 权限)和 www-data(没有任何实际权限,只能在其 "space" (/server/*) 中的 add/delete 目录)。我总是使用 ubuntu 建立连接,这样我就可以在需要时使用 sudo()。当我需要在应用程序级别做某事时,我称之为 def deploy() 我使用应用程序用户连接,所以我会做类似的事情:

@settings(user='www-data')
def deploy():
    run('whoami')  # will say www-data

或者如果我需要在我的 deploy() 中做一些 sudo() 我会做:

def deploy():
    sudo('whoami')  # will say ubuntu/root
    with settings(user='www-data'):
         run('whoami')  # will say www-data
         ... more code here

所以回顾一下:

  • 使用具有 sudo 访问权限的用户连接
  • 如果以后需要,请将用户更改为更高级别的用户

是的,我找到了答案。对于亚马逊实例,您需要禁用 requiretty

comment('/etc/sudoers', 'Defaults    requiretty', use_sudo=True)