问题描述
尝试使用远程复选框上的sudo
运行远程二进制文件时:
ssh remotehost "sudo ./binary"
我看到这个错误:
sudo: no tty present and no askpass program specified
我该如何解决这个问题?
编辑这绝对不是建议的问题的副本。那里的答案完全无关紧要。实际上,对sudoers文件的这些更改已经应用于远程主机。
最佳解决办法
一种简单的方法是指定-t
:
ssh -t remotehost "sudo ./binary"
从手册页:
Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local 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 – 到tty2是不可行的,因为它是non-chroot-ed环境的tty。
例如:使用chroot环境手动安装/修复linux或bootloader(例如Archlinux和arch-chroot)。
第三种解决办法
您需要定义将读取密码的终端/应用程序。有两种变体:
-
export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
-
vim /etc/sudoers
(默认值为visiblepw)
第四种办法
它失败了,因为sudo
尝试提示root密码并且没有分配pseudo-tty。
您可以在/etc/sudoers
(或:
sudo visudo
)中以log-in作为root或set-up以下规则:
# Members of the admin group may gain root privileges
%admin ALL=(ALL) NOPASSWD:ALL
然后确保您的用户属于admin
组(或wheel
)。