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 环境中,这些其他答案可能无法正常工作......可能是因为:
- /etc/shadow 与 /etc/passwd 冲突,不允许用户输入密码。
- 在 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
为我工作