【问题标题】:Windows Bash (WSL) - sudo: no tty present and no askpass program specifiedWindows Bash (WSL) - sudo:不存在 tty 且未指定 askpass 程序
【发布时间】:2017-02-24 02:23:36
【问题描述】:

在关注this tutroial 之后,尝试以用户甚至 sudo 身份运行命令时出现以下错误:

sudo:不存在 tty,也没有指定 askpass 程序

本文Lurdan的cmets声明需要运行

sudo -S <YOUR_COMMAND>
chmod 0666 /dev/tty

chmod 不起作用,但 sudo -S 起作用,但肯定还有其他解决方法吗?

【问题讨论】:

    标签: linux bash ubuntu ubuntu-16.04 windows-subsystem-for-linux


    【解决方案1】:

    WSL 使用 lxrun 可执行文件从 Windows 进行管理:

    lxrun -h

    Usage:
        /install - Installs the subsystem
            Optional arguments:
                /y - Do not prompt user to accept
        /uninstall - Uninstalls the subsystem
            Optional arguments:
                /full - Perform a full uninstall
                /y - Do not prompt user to accept
        /setdefaultuser - Configures the subsystem user that bash will be launched as. If the user does not exist it will be created.
            Optional arguments:
                username - Supply the username
                /y - If username is supplied, do not prompt to create a password
        /update - Updates the subsystem's package index
    

    鉴于此,您可以使用lxrun /setdefaultuser root。只是想我会指出它的这一面,因为当我在尝试升级到 Xenial 后遇到与您相同的问题时,它是必需的。我可以确认运行 this command,然后 wget / dpkg 命令解决了我的问题。

    我使用的命令:

    wget http://mirrors.kernel.org/ubuntu/pool/main/s/sudo/sudo_1.8.9p5-1ubuntu1.4_amd64.deb
    wget http://mirrors.kernel.org/ubuntu/pool/main/p/procps/procps_3.3.9-1ubuntu2_amd64.deb
    wget http://mirrors.kernel.org/ubuntu/pool/main/s/strace/strace_4.8-1ubuntu5_amd64.deb
    dpkg -i sudo_1.8.9p5-1ubuntu1.4_amd64.deb
    dpkg -i procps_3.3.9-1ubuntu2_amd64.deb
    dpkg -i strace_4.8-1ubuntu5_amd64.deb
    

    最后,您可能需要运行 sudo apt-get install -f 以防得到 The following packages have unmet dependencies [xxx] but it is not going to be installed

    【讨论】:

    • 这很好用。我在执行do-release-upgrade 后遇到了这个问题。一旦我运行了lxrun /setdefaultuser root,我就可以打开一个 bash shell 并运行visudo 来让我的用户帐户恢复 sudo 权限。之后我回到 powershell 并运行 lxrun /setdefaultuser &lt;user&gt;,现在又回到了 do-release-upgrade 之前的设置。
    • @Jake 您能解释一下您是如何为您的用户帐户授予 sudo 权限的吗?我做了my_user ALL=(ALL:ALL) ALL
    • 如果您在 wget 之后以相反的顺序执行此操作,实际上效果会更好,您甚至不必从 lxrun 更改默认用户。
    【解决方案2】:

    我通过将 /etc/hosts 移动到 /etc/hosts.bu 来消除错误。关闭 shell 并再次打开后,重新创建 /etc/hosts 并添加您的计算机名。错误消失了(对我来说)。

    【讨论】:

      【解决方案3】:

      太傻了,再往下看,我看到了Beorat的解决方案:

      为避免 sudo tty 问题和其他问题,请在运行 do-release-upgrade 之前运行这些命令:

      sudo -S apt-mark hold sudo
      sudo -S apt-mark hold procps
      sudo -S apt-mark hold strace
      

      如果您已经升级,请运行上述命令,然后手动降级到 Trusty 软件包:

      sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/s/sudo/sudo_1.8.9p5-1ubuntu1.1_amd64.deb
      sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/p/procps/procps_3.3.9-1ubuntu2_amd64.deb
      sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/s/strace/strace_4.8-1ubuntu5_amd64.deb
      sudo -S dpkg -i sudo_1.8.9p5-1ubuntu1.1_amd64.deb
      sudo -S dpkg -i procps_3.3.9-1ubuntu2_amd64.deb
      sudo -S dpkg -i strace_4.8-1ubuntu5_amd64.deb
      

      更多信息在这里:https://github.com/Microsoft/BashOnWindows/issues/482

      【讨论】:

      • 仅供参考,sudo 下载位置目前正在折腾 404。
      • 在sudo包URL中,将1ubuntu1.1_改为1ubuntu1_以修复404。
      • 我在安装 procps 时遇到关于 libprocps3 的错误。这修复了:sudo -S wget http://mirrors.kernel.org/ubuntu/pool/main/p/procps/libprocps3_3.3.9-1ubuntu2_amd64.deb; sudo -S dpkg -i libprocps3_3.3.9-1ubuntu2_amd64.deb