当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

尝试使用远程复选框上的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环境中,这些其他答案可能无法正常工作……可能是因为:

  1. /etc /shadow vs /etc /passwd冲突不允许用户输入密码。

  2. 在chroot-ed环境中,访问tty1可能有点毛病,而ctrl-alt f2 – 到tty2是不可行的,因为它是non-chroot-ed环境的tty。

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

第三种解决办法

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

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass

  2. 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)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1556.html,未经允许,请勿转载。