问题:

问题:

sudo当尝试在远程框上运行远程二进制文件时:

ssh remotehost "sudo ./binary"

我看到这个错误:

sudo: no tty present and no askpass program specified

我该如何解决这个问题?

答案1

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

ssh -t remotehost "sudo ./binary"

从手册页中:

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

我无法准确解释为什么这样做有效,但可能还有更好的方法。如果可以的话,我很想听听 :)

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

答案2

问题:

我该如何解决这个问题?

sudo: no tty present and no askpass program specified

替代答案

或者,请尝试:

sudo -S ./[yourExecutable]

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

适用场景

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

  1. /etc/shadow 与 /etc/passwd 冲突,不允许用户输入密码。
  2. 在 chroot 环境中,访问 tty1 可能会有点小问题,而且按 ctrl-alt f2 -- 到 tty2 是不可行的,因为它是非 chroot 环境的 tty。

例如:使用 chroot 环境(例如 Archlinux 和 arch-chroot)手动安装/修复 linux 或引导加载程序。

答案3

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

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

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

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

答案4

在我的情况下,我收到此错误是因为我没有在 sudoers 中指定我想以 root 身份使用的命令

就像是

/etc/sudoers.d/myuser

myuser ALL=(root) NOPASSWD: \
    /bin/ls -la

为我工作

相关内容