sudo:没有tty存在且没有指定askpass程序

尝试使用远程盒上的sudo运行远程二进制文件时:

 ssh remotehost "sudo ./binary" 

我看到这个错误:

sudo:没有tty存在且没有指定askpass程序

我该如何解决这个问题?

编辑这绝对不是建议的问题的副本。 那里的答案完全无关紧要。 实际上,对sudoers文件的这些更改已经应用于远程主机。

一种简单的方法是指定-t

 ssh -t remotehost "sudo ./binary" 

从手册页:

强制伪tty分配。 这可以用于在远程机器上执行任意基于屏幕的程序,这可以是非常有用的,例如在实现菜单服务时。 多个-t选项强制tty分配,即使ssh没有本地tty。

我无法解释为什么这有效,并且可能有更好的方法。 我想听听它是否如此:)

@psusi在下面的评论中解释了为什么会这样。

题:

我该如何解决这个问题?

 sudo: no tty present and no askpass program specified 

替代答案

作为替代方案,请尝试:

sudo -S ./binary

这指示sudo从标准输入stdin读取密码。

这有助于的场景

在chroot环境中,这些其他答案可能无法正常工作……可能是因为:

  1. / etc / shadow vs / etc / passwd冲突不允许用户输入密码。
  2. 在chroot-ed环境中,访问tty1可能有点毛病,而ctrl-alt f2 – to tty2是不可行的,因为它是非chroot-ed环境的tty。

例如:使用chroot环境(例如Archlinux和arch-chroot)手动安装/修复linux或bootloader。

您需要定义将读取密码的终端/应用程序。 有两种变体:

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (默认值为visiblepw)

它失败了,因为sudo试图提示root密码,并且没有分配伪tty。

您必须以root用户身份登录或在/etc/sudoers (或: sudo visudo )中设置以下规则:

 # Members of the admin group may gain root privileges %admin ALL=(ALL) NOPASSWD:ALL 

然后确保您的用户属于admin组(或wheel )。

您还可以在/etc/sudoers.d中创建类似“sudo_shutdown”的文件,其中包含以下内容:

 # Allow admins to shutdown without pass %adm ALL=(ALL) NOPASSWD: /sbin/shutdown 

这允许adm组中的用户在没有密码的情况下关闭。