【问题标题】:tty a must to run sudo in fabric. How to overcome this?tty 必须在 fabric 中运行 sudo。如何克服这一点?
【发布时间】:2023-04-09 08:36:02
【问题描述】:

我使用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'!

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

【问题讨论】:

    标签: mono fastcgi fabric


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我解决这个问题的方法是,我不知道是否有更好的方法,但它在我的脑海中是有意义的:我在我的 fabfile.py 中设置了两个用户,ubuntu(具有 sudo 权限)和@ 987654322@(没有任何实际权限,只能在其“空间”(/server/*)中添加/删除目录)。我总是使用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 访问权限的用户进行连接
      • 如果以后需要,将用户更改为更高级别的用户

      【讨论】:

      • 操作系统是amazon linux。我使用 ec2-user
      • @MosesLiaoGZ 没关系。在 ec2 上,root 是ubuntu,只需创建另一个没有实际权限的用户
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      相关资源
      最近更新 更多