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)
我通过以下命令使用 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)