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环境中,这些其他答案可能无法正常工作……可能是因为:
- / etc / shadow vs / etc / passwd冲突不允许用户输入密码。
- 在chroot-ed环境中,访问tty1可能有点毛病,而ctrl-alt f2 – to tty2是不可行的,因为它是非chroot-ed环境的tty。
例如:使用chroot环境(例如Archlinux和arch-chroot)手动安装/修复linux或bootloader。
您需要定义将读取密码的终端/应用程序。 有两种变体:
-
export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
-
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组中的用户在没有密码的情况下关闭。